MQTT SSE服务器

一个实现Model-Context Protocol (MCP)的服务器,通过Server-Sent Events (SSE)传输层提供MQTT代理连接能力,适用于需要实时消息传递的AI助手与外部服务交互场景。

  • by ysfscream
  • JavaScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 ysfscream/mqttx-mcp-sse-server

使用说明

MQTTX SSE服务器

模型上下文协议(MCP)的一种实现,它支持通过服务器发送事件(SSE)传输进行MQTT操作。

关于MCP

模型上下文协议(MCP)是一种标准化协议,允许AI助手与外部工具和服务进行交互。此服务器使用SSE(服务器发送事件)作为传输层实现MCP规范,提供MQTT代理连接功能。

特性

  • 实施MCP协议版本2024-11-05
  • 使用SSE(服务器发送事件)作为传输层
  • 通过MCP工具提供MQTT操作:
    • 连接到MQTT代理
    • 订阅MQTT主题
    • 将消息发布到MQTT主题
  • 订阅主题的实时消息传递
  • 多客户端会话管理

入门指南

先决条件

  • Node.js(v14或更高版本)
  • npm

安装

# Clone the repository
git clone https://github.com/yourusername/mqttx-sse-server.git
cd mqttx-sse-server

# Install dependencies
npm install

运行服务器

npm start

默认情况下,服务器将在端口4000上启动。

配置MQTTX

要将此MCP服务器与MQTTX一起使用,请将以下配置添加到MQTTX设置中:

{
  "mcpServers": {
    "mqttx-server": {
      "url": "http://localhost:4000/mqttx/sse"
    }
  }
}

MCP协议实现

此服务器使用以下组件实现模型上下文协议:

  • SSE 连接:为实时更新建立持久连接
  • JSON-RPC API:根据MCP规范处理工具调用和响应
  • 工具界面:通过标准化的MCP工具提供MQTT功能
  • 会话管理:跟踪客户端会话及其MQTT连接

api参考

SSE 连接

建立用于接收服务器事件的持久连接。

GET /mqttx/sse

响应事件:

  • endpoint:包含进行JSON-RPC调用的URL
  • heartbeat:定期ping以保持连接畅通
  • message:包含JSON-RPC响应

JSON-RPC命令

所有命令都将使用您的会话ID发送到消息端点:

POST /mqttx/message?sessionId=xxx

初始化

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize"
}

列出工具

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list"
}

MQTT连接

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "mqttConnect",
    "arguments": {
      "host": "broker.example.com",
      "port": 1883,
      "clientId": "mqttx-client"
    }
  }
}

MQTT订阅

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
      "name": "mqttSubscribe",
      "arguments": {
        "topic": "test/topic",
        "qos": 0
      }
  }
}

MQTT发布

{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": {
      "name": "mqttPublish",
      "arguments": {
        "topic": "test/topic",
        "payload": "Hello MQTT!",
        "qos": 0,
        "retain": false
      }
  }
}