# ESP32 MCP Server 组件
[](https://components.espressif.com/components/0x1abin/esp_mcp_server)
[](https://github.com/espressif/esp-idf)
[](https://opensource.org/licenses/MIT)
**中文** | [English](README.md)
一个实现 **模型上下文协议 (MCP)** 服务器的 ESP32 组件,为 AI 应用程序与 ESP32 设备的集成提供标准化方式。该组件使您的 ESP32 能够暴露工具和资源,供 AI 代理和应用程序发现和使用。
## 🌟 特性
- **🚀 简洁 API**: 干净、直观的工具和资源注册接口
- **🔧 动态注册**: 运行时注册工具和资源
- **📦 模块化设计**: 独立组件,易于集成到现有项目
- **🌐 HTTP 传输**: 基于 HTTP 的 JSON-RPC 2.0,最大兼容性
- **🔄 URI 模板**: 支持参数化资源 URI(如 `sensor://{type}/{id}`)
- **📊 实时监控**: 内置服务器统计和健康监控
- **🛡️ 内存安全**: 自动内存管理和清理
- **✅ Schema 验证**: 内置参数验证(类似 Zod)
- **🎯 MCP 兼容**: 完全符合 MCP 规范 2025-06-18
## 📦 安装
### 使用 ESP Component Registry(推荐)
```bash
idf.py add-dependency "0x1abin/esp_mcp_server"
```
### 手动安装
```bash
cd your_project/components
git clone https://github.com/0x1abin/esp-mcp-server.git esp_mcp_server
```
## 🚀 快速开始
```c
#include "esp_mcp_server.h"
// 工具处理函数
static cJSON* echo_tool_handler(const cJSON *arguments, void *user_data) {
cJSON *message = cJSON_GetObjectItem(arguments, "message");
cJSON *result = cJSON_CreateObject();
cJSON *content_array = cJSON_CreateArray();
cJSON *content = cJSON_CreateObject();
cJSON_AddStringToObject(content, "type", "text");
cJSON_AddStringToObject(content, "text", message->valuestring);
cJSON_AddItemToArray(content_array, content);
cJSON_AddItemToObject(result, "content", content_array);
return result;
}
void app_main(void) {
// 初始化 WiFi
ESP_ERROR_CHECK(example_connect());
// 配置 MCP 服务器
esp_mcp_server_config_t config = ESP_MCP_SERVER_DEFAULT_CONFIG();
config.port = 80;
config.server_name = "ESP32 MCP Server";
// 初始化服务器
esp_mcp_server_handle_t server;
ESP_ERROR_CHECK(esp_mcp_server_init(&config, &server));
// 创建输入验证 schema
cJSON *schema = schema_builder_create_object();
schema_builder_add_string(schema, "message", "要回显的消息", true);
// 注册工具
esp_mcp_tool_config_t tool_config = {
.name = "echo",
.description = "回显提供的消息",
.input_schema = schema,
.handler = echo_tool_handler,
.user_data = NULL
};
ESP_ERROR_CHECK(esp_mcp_server_register_tool(server, &tool_config));
// 启动服务器
ESP_ERROR_CHECK(esp_mcp_server_start(server));
ESP_LOGI("MAIN", "MCP 服务器已在端口 %d 启动", config.port);
}
```
## 🔧 主要 API
### 服务器生命周期
```c
// 初始化服务器(不启动 HTTP 服务器)
esp_err_t esp_mcp_server_init(const esp_mcp_server_config_t *config,
esp_mcp_server_handle_t *server_handle);
// 注册工具和资源后启动 HTTP 服务器
esp_err_t esp_mcp_server_start(esp_mcp_server_handle_t server_handle);
// 停止 HTTP 服务器(可稍后重启)
esp_err_t esp_mcp_server_stop(esp_mcp_server_handle_t server_handle);
// 清理并释放所有资源
esp_err_t esp_mcp_server_deinit(esp_mcp_server_handle_t server_handle);
```
### 工具注册
```c
// 注册带可选 schema 验证的工具
esp_err_t esp_mcp_server_register_tool(esp_mcp_server_handle_t server_handle,
const esp_mcp_tool_config_t *tool_config);
```
### Schema 验证(内置类 Zod API)
```c
// 创建 schema 对象
cJSON* schema_builder_create_object(void);
// 添加带验证的类型字段
esp_err_t schema_builder_add_string(cJSON *schema, const char *name,
const char *description, bool required);
esp_err_t schema_builder_add_integer(cJSON *schema, const char *name,
const char *description, int min, int max, bool required);
```
## 📊 示例
组件在 `examples/simple/` 中包含完整示例,演示:
- WiFi 连接设置
- MCP 服务器初始化和配置
- 带 schema 验证的工具注册
- 带 URI 模板的资源注册
- GPIO 控制集成
- ADC 读取功能
### 运行示例
```bash
cd examples/simple
idf.py set-target esp32
idf.py menuconfig # 配置 WiFi 凭据
idf.py build flash monitor
```
## 🧪 测试
使用任何 MCP 兼容客户端测试您的 MCP 服务器:
```bash
# 测试工具列表
curl -X POST http://your-esp32-ip/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# 调用工具
curl -X POST http://your-esp32-ip/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"echo","arguments":{"message":"你好世界"}}}'
```
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🔗 相关项目
- [模型上下文协议规范](https://modelcontextprotocol.io/)
- [ESP-IDF](https://github.com/espressif/esp-idf)
---
**为 ESP32 和 AI 社区用 ❤️ 制作**
idf.py add-dependency "0x1abin/esp_mcp_server^0.0.1"