OpenEcoBee MCP
This MCP server lets you inspect and control ecobee thermostats, with changes requiring write permission or explicit local opt-in.
List accessible thermostats and view current temperatures, setpoints, limits, and connection state.
Read a specific thermostat’s current status; fields ending in
Fare Fahrenheit.Set a 1–24 hour temperature hold using heat, cool, or both with explicit Fahrenheit/Celsius units, keeping omitted setpoints.
Change HVAC mode to
off,heat,cool, orauto.Resume a thermostat’s programmed schedule from a hold.
The schema exposes these five core tools; README mentions broader features via
get_capabilities, but they are not shown in this schema.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenEcoBee MCP Set the downstairs thermostat to 68°F for two hours"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenEcoBee MCP
An open-source MCP server for controlling ecobee thermostats from ChatGPT. The Cloudflare deployment is designed to run entirely in the cloud: people connect their own ecobee account through a browser, without installing a local companion or obtaining an ecobee developer API key.
Experimental. The Cloudflare deployment, GitHub sign-in, ecobee login, restoring and renewing an encrypted session, a thermostat read through ChatGPT, and a real indefinite cooling hold have been verified. Broader controls have implementation tests; live verification is recorded in the coverage document. Ecobee can block cloud browsers, and portal changes can break this unofficial integration.
The operator's hosted pilot is currently restricted to the operator's GitHub account. Other users can deploy their own instance using the guide below.
What “no auth token” means
People do not need an ecobee developer application or manually copied access token. They still sign in to their own ecobee account and complete its normal multifactor authentication. The service saves the resulting browser session so later MCP calls can use it. This is authenticated access, with token handling kept out of the user's setup.
For the hosted service, users sign in with GitHub to identify their OpenEcoBee account and authorize the MCP connection. Ecobee login happens separately in a hosted browser. The operator hosting OpenEcoBee is trusted with the ecobee session: saved state is encrypted, but the running service has the key needed to decrypt it. See security.
Ecobee's standard portal sign-in requests thermostat access, profile read/write access, and sign-in grant management. OpenEcoBee exposes only its fixed thermostat tools, but the saved portal session has these broader permissions.
Ecobee currently does not accept new developer registrations, so this project uses its signed-in web portal instead of requiring a developer API key.
Related MCP server: Sonoff MCP Server
Hosted setup
The operator deploys the Worker and configures GitHub OAuth once. End users do not need Cloudflare accounts, server keys, or a process running on their computer.
Deploy the service using the Cloudflare guide.
Open the deployed
/apppage and sign in with GitHub.Connect ecobee, complete the normal login/MFA in the hosted browser, and finish the connection.
Keep access read-only initially; enable thermostat changes in the account page when ready.
Add the deployed HTTPS
/mcpendpoint to ChatGPT with OAuth. See Connect ChatGPT.
The deployment starts with a closed user allowlist. Verify login, account isolation, and a deliberate thermostat command before broadening access.
If ecobee requires another sign-in, open your hosted /app page, choose Open ecobee sign-in, complete login/MFA in the private browser, and choose Finish connecting ecobee. Use Check connection to verify the restored session. Ecobee sign-in is separate from ChatGPT authorization; reconnecting ecobee keeps your existing ChatGPT connection and thermostat permissions.
MCP tools
The server provides tools covering thermostat state and holds, eco+ master control, energy/automation inspection, Smart Recovery, comfort settings, weekly schedules, fan, sensors, vacations, alerts, messages, runtime reports, and documented settings. Use get_capabilities for the current catalog. See feature coverage for the distinction between implemented interfaces, live verification, device-specific support, and unverified eco+ subfeatures.
The original core tools remain available:
Tool | Purpose |
| List accessible thermostats and their identifiers. |
| Read temperature, humidity, mode, connection state, and setpoints. |
| Set a heating/cooling hold with an explicit duration; accepts Fahrenheit or Celsius. |
| Select |
| End a hold and resume the thermostat's schedule. |
Changes require writes to be enabled. Holds can last 1–24 hours, until the next scheduled change, or until changed explicitly. Setpoints must fit the thermostat's reported limits; minimum heat/cool separation applies in Auto mode. A response distinguishes accepted delivery from observed readback. Always check a pending result before retrying a change. Schedule resumption is reported as accepted without claiming physical verification.
Example prompts:
“List my thermostats and show the downstairs temperature.”
“Set the downstairs heating setpoint to 68°F and cooling setpoint to 76°F for two hours.”
“Resume the downstairs thermostat's schedule.”
“Show my eco+ state, Smart Recovery preferences, and active holds without changing anything.”
“Turn off the eco+ master setting.”
“Enable Smart Recovery for cooling.”
An indefinite hold overrides the schedule, and Smart Recovery does not run during that hold. Individual eco+ switches and savings levels still require verified interfaces; the master control does not imply full eco+ feature coverage.
Local development
Use Node.js 22 or newer:
npm install
npm run check
npm test
npm run buildTry the simulated thermostat without an account:
npm run demo
# To exercise changes against the simulation:
node dist/cli.js serve --demo --allow-writesThe demo is a stdio MCP server and waits for a client. It simulates the original five thermostat controls; the extended features require a real browser backend. For a local real-account experiment, install Chromium and complete ecobee login on this computer:
npx playwright install chromium
node dist/cli.js login
node dist/cli.js status
node dist/cli.js serve
# Explicitly opt in to thermostat changes:
node dist/cli.js serve --allow-writesLocal state defaults to .openecobee/profile, relative to the working directory. Use --profile /absolute/path/to/profile or OPENECOBEE_PROFILE when a client launches the server from a different directory. Treat the directory as credentials and run only one process against it at a time.
A generic local MCP client can launch the server with:
{
"mcpServers": {
"openecobee": {
"command": "node",
"args": [
"/absolute/path/to/OpenEcoBee/dist/cli.js",
"serve",
"--profile",
"/absolute/path/to/OpenEcoBee/.openecobee/profile"
]
}
}
}For local HTTP, run node dist/cli.js serve --transport http. It listens at http://127.0.0.1:3000/mcp, with local host/origin checks. This local endpoint has no OAuth and must remain private. The hosted Worker has a separate authenticated deployment path.
Project notes
The browser integration depends on ecobee portal internals. Login sessions can expire, cloud browsers can be rejected, and the adapter can stop working after a portal release. There is no offline control path.
See architecture, CONTRIBUTING.md, and SECURITY.md. This is an independent MIT-licensed implementation inspired by emrikol/ecobee-mcp; its code is not copied. REA is a reference for investigating browser applications, not a runtime dependency.
Not affiliated with or endorsed by ecobee, OpenAI, GitHub, or Cloudflare.
Available Tools
5 toolsget_thermostat_statusBRead-onlyIdempotent
Read a thermostat's current status. All fields ending F are Fahrenheit.
Inputs: thermostat_id (required).
list_thermostatsARead-onlyIdempotent
List thermostats and their current temperatures, setpoints, limits, and connection state.
Inputs: no named parameters.
resume_scheduleADestructive
Resume the thermostat's programmed schedule from a hold. Requires account write permission and the client write scope when hosted, or server --allow-writes locally.
Inputs: thermostat_id (required).
set_hvac_modeADestructive
Change thermostat HVAC mode to off, heat, cool, or auto. Requires account write permission and the client write scope when hosted, or server --allow-writes locally.
Inputs: mode (required), thermostat_id (required).
set_temperatureADestructive
Set a 1–24 hour temperature hold. Supply heat, cool, or both with explicit F/C units. Keeps any omitted setpoint. Requires account write permission and the client write scope when hosted, or server --allow-writes locally.
Inputs: unit (required), hours (required), thermostat_id (required), cool, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
list_thermostats and get_thermostat_status both read thermostat state and their boundaries blur, since list_thermostats already returns temperatures and setpoints. However, the plural listing vs. single-thermostat detail distinction and the write actions (set_temperature, set_hvac_mode, resume_schedule) are otherwise clearly separable.
All tools follow a clean snake_case verb_noun pattern: list_thermostats, get_thermostat_status, set_temperature, set_hvac_mode, resume_schedule. Verbs are consistently action-oriented and nouns are clear.
Five tools is well-scoped for a thermostat controller: discovery, status read, temperature hold, mode change, and schedule resume. Each tool earns its place with no filler.
The surface covers the core read/set/resume lifecycle of thermostat control, but lacks operations like viewing the programmed schedule, setting fan/humidity modes, or canceling a hold explicitly. Minor gaps an agent can mostly work around.
Maintenance
Related MCP Connectors
Control your Tesla from your AI assistant - climate, charging, access, and security.
Web search, data extraction and controlled browser automation for AI assistants via OAuth.
AI for your car: check charge, start climate, lock/unlock, open trunk via Tesla Fleet API. OAuth.
Manage Google Ads from ChatGPT, Claude or any MCP client. Sign in with OAuth or use an API key.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables control and monitoring of Plugwise smart home devices including thermostats, switches, and energy meters with automatic network discovery. Supports temperature control, energy monitoring, and multi-hub management through natural language commands.1629 npm2MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to control Sonoff smart-home devices through the eWelink Cloud API, with tools for device listing, switching, thermostat control, and sensor data retrieval.1-
- AlicenseNot gradedqualityCmaintenanceEnables ChatGPT to connect to and interact with Strava via a stateless relay with browser-guided OAuth sign-in.MIT
- AlicenseNot gradedqualityCmaintenanceReads thermostat status and controls HVAC modes, holds, schedules, comfort sensors, settings, vacations, fan runtime, and on-screen messages for a single thermostat account, hosted remotely on Cloudflare Workers with bearer-protected, stateless access.96 npmMIT