MQTT MCP Server
README.md
# MQTT MCP Server
An MCP (Model Context Protocol) server that provides MQTT client functionality. This allows Claude to interact with MQTT brokers - publishing messages, subscribing to topics, and managing connections.
Available in **both TypeScript (Node.js)** and **Python (FastMCP)** versions!
## Features
- **MCP Server**: Connect to MQTT brokers through Claude
- **Web Application**: Real-time background color changes via MQTT
- **Dual Implementation**: TypeScript (local) + Python (cloud deployment)
- Connect to MQTT brokers (supports mqtt:// and mqtts://)
- Publish messages to topics with QoS and retain options
- Subscribe to topics (including wildcard subscriptions)
- Unsubscribe from topics
- Check connection status
- Disconnect from brokers
- WebSocket real-time updates
- Interactive web UI with color presets
- FastMCP Cloud ready for one-click deployment
## Quick Start
### TypeScript Version (Local)
```bash
npm install
npm run build
```
### Python Version (FastMCP Cloud)
See [FASTMCP_DEPLOYMENT.md](FASTMCP_DEPLOYMENT.md) for one-click cloud deployment!
## Usage
### As a Claude Desktop MCP Server
#### Option 1: TypeScript Version (Local - Easy Setup)
Run the automated setup script:
```bash
npm run setup # macOS/Linux
npm run setup:windows # Windows
```
Or manually add this to your Claude Desktop configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"mqtt": {
"command": "node",
"args": ["/Users/sara/TestAlin/build/index.js"]
}
}
}
```
After adding this configuration, restart Claude Desktop.
#### Option 2: Python Version (FastMCP Cloud - Recommended)
Deploy to FastMCP Cloud for cloud-hosted MQTT MCP server:
1. Visit [https://fastmcp.cloud](https://fastmcp.cloud)
2. Create a project from this GitHub repository
3. Set entrypoint to `mqtt_mcp_server.py`
4. Deploy with one click!
See [FASTMCP_DEPLOYMENT.md](FASTMCP_DEPLOYMENT.md) for detailed instructions.
### Web Application with Color Changing Background
The web application subscribes to MQTT messages and changes its background color in real-time!
```bash
# Start the web server (defaults to port 3000)
npm run start:web
# Or specify custom settings
MQTT_BROKER=mqtt://broker.hivemq.com:1883 MQTT_TOPIC=color/change PORT=3000 npm run start:web
```
Then open your browser to `http://localhost:3000`
**How it works:**
1. The web app connects to the MQTT broker and subscribes to the configured topic (default: `color/change`)
2. When any MQTT client publishes a color to that topic, the background changes instantly
3. You can test it from the web UI or ask Claude to publish colors via the MCP server
**Environment Variables:**
- `MQTT_BROKER`: MQTT broker URL (default: `mqtt://broker.hivemq.com:1883`)
- `MQTT_TOPIC`: Topic to subscribe to (default: `color/change`)
- `PORT`: Web server port (default: `3000`)
### MCP Server Standalone
```bash
npm start
```
## Available Tools
### mqtt_connect
Connect to an MQTT broker.
**Parameters:**
- `broker_url` (required): MQTT broker URL (e.g., `mqtt://localhost:1883` or `mqtts://broker.hivemq.com:8883`)
- `client_id` (optional): Client ID for the connection
- `username` (optional): Username for authentication
- `password` (optional): Password for authentication
**Example:**
```
Connect to mqtt://broker.hivemq.com:1883
```
### mqtt_publish
Publish a message to an MQTT topic.
**Parameters:**
- `topic` (required): The MQTT topic to publish to
- `message` (required): The message payload
- `qos` (optional): Quality of Service level (0, 1, or 2). Default: 0
- `retain` (optional): Whether to retain the message. Default: false
**Example:**
```
Publish "Hello World" to topic "test/example"
```
### mqtt_subscribe
Subscribe to an MQTT topic to receive messages.
**Parameters:**
- `topic` (required): The MQTT topic (supports `+` for single-level and `#` for multi-level wildcards)
- `qos` (optional): Quality of Service level (0, 1, or 2). Default: 0
**Example:**
```
Subscribe to topic "sensors/#"
```
Note: Received messages are logged to stderr and will appear in Claude's context.
### mqtt_unsubscribe
Unsubscribe from an MQTT topic.
**Parameters:**
- `topic` (required): The MQTT topic to unsubscribe from
### mqtt_disconnect
Disconnect from the MQTT broker.
### mqtt_status
Get the current connection status including active subscriptions.
## Example Workflow
### Using the Web App with Claude's MCP Server
1. **Start the web application:**
```bash
npm run start:web
```
2. **Open your browser** to `http://localhost:3000`
3. **Ask Claude to publish colors** (via MCP):
```
Connect to mqtt://broker.hivemq.com:1883 and publish "red" to topic "color/change"
```
4. **Watch the background change** in real-time!
5. **Try different colors:**
```
Publish "#FF5733" to topic "color/change"
Publish "blue" to topic "color/change"
Publish "rgb(46, 204, 113)" to topic "color/change"
```
### Using the MCP Server Only
1. Connect to a broker:
```
Connect to the public MQTT broker at mqtt://broker.hivemq.com:1883
```
2. Subscribe to a topic:
```
Subscribe to topic "test/demo"
```
3. Publish a message:
```
Publish "Hello from Claude!" to topic "test/demo"
```
4. Check status:
```
What's the MQTT connection status?
```
5. Disconnect:
```
Disconnect from the MQTT broker
```
## Public Test Brokers
For testing, you can use these public MQTT brokers:
- `mqtt://broker.hivemq.com:1883` (Eclipse Mosquitto)
- `mqtt://broker.hivemq.com:1883` (HiveMQ)
- `mqtt://mqtt.eclipseprojects.io:1883` (Eclipse IoT)
**Note:** Do not send sensitive data to public brokers.
## Development
```bash
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run watch
```
## License
MIT
TDQS
A3.7/5.0
Scored across 6 tools
Disambiguation5/5
Each tool has a unique purpose (connect, disconnect, publish, status, subscribe, unsubscribe) with no overlap; an agent can easily distinguish between them.
Naming Consistency5/5
All tool names follow a consistent 'mqtt_verb' pattern in snake_case, making the tool set predictable and easy to navigate.
Tool Count5/5
Six tools cover the core MQTT operations without unnecessary extras; the count is well-scoped for a focused MQTT client server.
Completeness4/5
Essential lifecycle operations (connect, disconnect, publish, subscribe, unsubscribe) are present, plus a status check. A tool to fetch received messages might be missing, but this is a minor gap.
Maintenance
ActivityInactive
ResponsivenessNo issues