That is what makes this usable without writing a tool per device: you describe the command, its topics, and the phrasings that should reach it, and the mapping from natural language to MQTT is configuration rather than code. Running several devices means several server entries with different config names, which keeps each device's vocabulary separate.
A bridge between MCP clients and MQTT-connected devices. You declare commands in a YAML file with the prompts that should trigger them, and the server publishes and waits for the response.
- Publish and subscribe against any MQTT broker — Mosquitto, EMQ X and others — with QoS, username and password auth, and topic-based routing
- Commands defined in config.yaml, each with its own publish topic, response topic and example prompts
- A simple text command format: PWM with a value from 0 to 100, LED on or off, INFO for device details, answered with CMD ... OK or ERROR: with a message
- Several devices at once by running more than one server entry, each pointed at a different config file
- A device simulator in tests/responder.py, so you can try the whole loop with no hardware
Python with uv, and a reachable MQTT broker. Install scripts are provided for Windows, macOS and Ubuntu or Raspberry Pi, and they configure Claude Desktop if it is installed. The config file goes in the working directory, in a .mcp2mqtt folder under your home directory, or in a system-wide location — the first one found wins. Run it with uvx mcp2mqtt, adding --config and a name to pick a specific profile.
One command — uvx mcp2mqtt
