# ESP-IDF MCP over MQTT SDK [English](README.md) | [中文](README_CN.md) 一个用于 ESP32 平台的 Model Context Protocol (MCP) over MQTT 5.0 实现,基于 ESP-IDF 框架开发。 ## 什么是 MCP? **Model Context Protocol (MCP)** 是一个开放协议,用于 AI 助手与外部数据源和工具之间的安全、结构化通信。MCP 允许 AI 助手: - 访问外部数据源和知识库 - 调用外部工具和服务 - 在安全边界内操作 - 与多种数据源进行标准化交互 MCP 通过定义清晰的接口和协议,使 AI 助手能够安全地扩展其能力,同时保持对数据访问的控制。 ## 为什么选择 MCP over MQTT?  MQTT 是一个轻量级的消息传输协议,专为物联网和边缘计算设计。将 MCP 与 MQTT 结合带来以下优势: ### 核心特性 - **轻量级传输**: 适合带宽受限的网络环境 - **可靠的消息传递**: 支持 QoS 级别和消息持久化 - **内置服务发现**: MCP 客户端可自动发现可用的 MCP 服务器 - **负载均衡和扩展性**: 支持水平扩展 MCP 服务器实例 - **灵活的访问控制**: 通过 MQTT 主题权限实现细粒度授权 ### 适用场景 - **边缘计算**: 在资源受限的设备上部署 MCP 服务器 - **IoT 应用**: 为智能设备提供 AI 能力 - **云边协同**: 云端 AI 与边缘设备的无缝集成 - **实时通信**: 支持低延迟的 AI 工具调用 ## SDK 功能特性 ### 核心功能 - **MCP 服务器**: 完整的 MCP 协议实现 - **MQTT 5.0 支持**: 基于 ESP-IDF MQTT 客户端 - **工具注册**: 支持动态注册和调用 MCP 工具 - **资源管理**: 提供数据资源访问能力 - **JSON-RPC**: 基于 JSON-RPC 2.0 的通信协议 ### 工具系统 ```c typedef struct { char *name; // 工具名称 char *description; // 工具描述 int property_count; // 参数数量 property_t *properties; // 参数定义 const char *(*call)(int n_args, property_t *args); // 执行函数 } mcp_tool_t; ``` ### 资源管理 ```c typedef struct { char *uri; // 资源 URI char *name; // 资源名称 char *description; // 资源描述 char *mime_type; // MIME 类型 char *title; // 资源标题 } mcp_resource_t; ``` ### 安全特性 - **TLS/SSL 支持**: 支持 MQTTS 安全连接 - **用户认证**: 用户名/密码认证 - **证书验证**: 客户端证书支持 - **访问控制**: 基于 MQTT 主题的权限管理 ## 安装和依赖 ### 系统要求 - ESP-IDF v5.0 或更高版本 - ESP32 系列芯片 - 支持 MQTT 5.0 的 MQTT Broker ### 依赖组件 ```yaml REQUIRES: - mqtt # ESP-IDF MQTT 客户端 - json # JSON 解析库 ``` ### 安装步骤 1. 将本组件添加到你的 ESP-IDF 项目中 2. 在 `CMakeLists.txt` 中添加依赖 3. 配置 MQTT Broker 连接参数 ## 快速开始 ### 基本使用示例 ```c #include "mcp_server.h" // 定义 MCP 工具 mcp_tool_t my_tools[] = { { .name = "get_temperature", .description = "获取设备温度", .property_count = 0, .properties = NULL, .call = get_temperature_callback } }; // 初始化 MCP 服务器 mcp_server_t *server = mcp_server_init( "esp32_sensor", // 服务器名称 "ESP32 传感器 MCP 服务器", // 描述 "mqtt://broker.example.com", // MQTT Broker URI "esp32_client_001", // 客户端 ID "username", // 用户名 "password", // 密码 NULL // 证书(可选) ); // 注册工具 mcp_server_register_tool(server, 1, my_tools); // 启动服务器 mcp_server_run(server); ``` ### 工具回调函数示例 ```c const char* get_temperature_callback(int n_args, property_t *args) { // 读取传感器数据 float temp = read_temperature_sensor(); // 返回 JSON 格式结果 static char result[64]; snprintf(result, sizeof(result), "{\"temperature\": %.2f}", temp); return result; } ``` ## 协议规范 本 SDK 实现了 [MCP over MQTT 协议规范](https://github.com/mqtt-ai/mcp-over-mqtt),支持: - **服务发现**: 自动发现和注册 MCP 服务器 - **负载均衡**: 支持多实例部署 - **状态管理**: 保持 MCP 服务器状态 - **权限控制**: 基于 MQTT 主题的访问控制 ## 许可证 本项目采用 [LICENSE](LICENSE) 许可证。 ## 相关链接 - [MCP 官方文档](https://modelcontextprotocol.io/) - [MCP over MQTT 规范](https://github.com/mqtt-ai/mcp-over-mqtt) - [ESP-IDF 文档](https://docs.espressif.com/projects/esp-idf/) - [MQTT 协议规范](https://mqtt.org/specification/) - [MCP over MQTT Python SDK](https://github.com/emqx/mcp-python-sdk)
aa5a40fbba04878bcbeb383c3e03b5943ee4973e
idf.py add-dependency "mqtt-ai/esp-mcp-over-mqtt^0.0.1"