BG

bryannewcoder/garage-mcp

Developer tools
0 stars 0 forks Quality 73 Trend 20MIT

An MCP server for a Meross garage door opener. It exposes three tools to an AI assistant over stdio:

Overview

An MCP server for a Meross garage door opener. It exposes three tools to an AI assistant over stdio: - garage_status — returns the door's current open/closed state - garage_open — opens the door (two-phase confirm, see Safety) - garage_close — closes the door (two-phase confirm, see Safety) Opening or closing the door is a operation, by design: 1. — call garage_open / garage_close with no arguments. It reports the current state and asks for confirmation. Relay that to the user and wait. 2. — only after the user explicitly says yes/go/open (or yes/go/close), call again with confirm="YES". The command is sent. If the user replies ABORT / STOP / CANCEL, do not make the phase 2 call. Never self-confirm. A 30-second cooldown also rejects duplicate commands while the door is in motion — use garage_status to check the state instead. - Python 3.10+ - A Meross account with a garage door opener on it - pip install mcp meross_iot 2. Log in to Meross to produce a cached token at ~/.

README

Garage MCP

An MCP server for a Meross garage door opener. It exposes three tools to an AI assistant over stdio:

  • garage_status — returns the door’s current open/closed state
  • garage_open — opens the door (two-phase confirm, see Safety)
  • garage_close — closes the door (two-phase confirm, see Safety)

Safety

Opening or closing the door is a two-phase operation, by design:

  1. Phase 1 — call garage_open / garage_close with no arguments. It reports the current state and asks for confirmation. Relay that to the user and wait.
  2. Phase 2 — only after the user explicitly says yes/go/open (or yes/go/close), call again with confirm="YES". The command is sent.

If the user replies ABORT / STOP / CANCEL, do not make the phase 2 call. Never self-confirm.

A 30-second cooldown also rejects duplicate commands while the door is in motion — use garage_status to check the state instead.

Requirements

  • Python 3.10+
  • A Meross account with a garage door opener on it
  • pip install mcp meross_iot

Setup

  1. Install dependencies:

    pip install mcp meross_iot
    
  2. Log in to Meross once to produce a cached token at ~/.config/meross/token.json. The server reads that file at runtime — the token is never printed, and it is not part of this repo.

  3. Point your MCP client at the script, e.g.:

    {
      "mcpServers": {
        "garage": {
          "command": "python3",
          "args": ["/path/to/garage_mcp.py"]
        }
      }
    }
    

How it works

On each call, the server loads the cached credentials, discovers Meross devices on the account, and uses the first device that supports the garage-opener interface. Status reads the door sensor; open/close sends the command and starts the cooldown timer. If the token is expired or missing, the tool returns an error telling you to log in again — it never asks for credentials itself.

Security notes

  • The token file at ~/.config/meross/token.json holds your Meross account credentials. Keep it private, never commit it, and never share it.
  • This server has no authentication of its own — it trusts whoever can run it. Keep it on a machine you control.

License

MIT — see LICENSE. Use it, fork it, improve it.

Questions or bugs

Please open an Issue on this repo.

View this README on GitHub

Install

This server does not publish a one-line install command.

Open the repository installation guide

Configuration

{ "mcpServers": { "garage": { "command": "python3", "args": ["/path/to/garage_mcp.py"] } } }