Mcpesp-ESP32模型上下文协议库
一个可配置的Arduino库,用于在ESP32设备上实现模型上下文协议(MCP)服务器。此库使您能够将ESP32硬件功能作为MCP工具公开,可以通过HTTP/JSON-RPC调用,允许AI模型和其他客户端通过标准化协议与ESP32交互。
描述
Mcpesp为ESP32提供了模型上下文协议服务器的完整实现。它处理JSON-RPC请求、工具注册、模式验证和CORS标头,使创建向外部客户端公开ESP32功能的MCP服务器变得容易。
特性
- MCP协议支持:MCP协议的基本实现
- 工具注册:使用回调函数轻松注册自定义工具
- 架构验证:用于定义工具输入参数的内置模式生成器
- HTTP服务器:集成到ESP32的Web服务器中,用于处理HTTP/JSON-RPC请求
- JSON-RPC 2.0:与JSON-RPC 2.0规范兼容
- WiFi集成:适用于ESP32 WiFi功能
安装
Arduino集成开发环境
- 下载或克隆此存储库
- 放置
mcpespArduino中的文件夹libraries目录 - 重新启动Arduino IDE
平台IO
添加到您的 platformio.ini:
lib_deps =
bblanchon/ArduinoJson@^7.0.0依赖项
- ArduinoJson:JSON解析和生成库(版本7.x或兼容)
- ESP32董事会支持:需要Arduino IDE的ESP32板支持包
- Web服务器:包含在ESP32核心库中
快速开始
#include
#include
// WiFi credentials
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// LED pin for demonstration
#define LED_PIN 8
// Create MCP server instance
Mcpesp mcpServer;
void myToolCallback(JsonObject arguments, JsonObject result) {
bool state = arguments["enabled"].as(); // Name of the property is "enabled"
bool ledState = state;
digitalWrite(LED_PIN, ledState ? LOW : HIGH); // LOW = ON for most ESP32 boards
result["text"] = "LED turned " + String(state) + " successfully!";
Serial.println("LED state changed to: " + state);
}
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected!");
// Initialize MCP server
mcpServer.begin("My MCP Server", "1.0.0");
// Create tool schema
Schema toolSchema;
toolSchema.addBooleanProperty("enabled", "Enable or disable feature");
// Register tool
mcpServer.addTool(
"my_tool",
"Description of my tool",
toolSchema,
myToolCallback
);
}
void loop() {
mcpServer.handleClient();
}API 参考
Mcpesp类
构造函数
Mcpesp()创建新的MCP服务器实例。
方法
begin(serverName, version, port)
初始化MCP服务器。
- 参数:
- serverName (const char\*):服务器的名称(默认值:“ESP32 MCP服务器”) - version (const char\*):服务器版本(默认值:“1.0.0”) - port (int):HTTP服务器端口(默认值:80)
- 退货:无效
addTool(name, description, inputSchema, callback)
在服务器上注册新工具。
- 参数:
- name (const String&):工具名称(必须唯一) - description (const String&):工具描述 - inputSchema (模式&):输入参数模式 - callback (toolCallback):调用工具时执行的回调函数
- 退货:无效
handleClient()
处理传入的客户端请求。把这个叫你的 loop() 功能。
- 退货:无效
setServerInfo(name, version)
更新服务器名称和版本。
- 参数:
- name (const String&):服务器名称 - version (const String&):服务器版本
- 退货:无效
setProtocolVersion(version)
设置MCP协议版本。
- 参数:
- version (const String&):协议版本(默认值:“2025-03-26”)
- 退货:无效
isInitialized()
检查服务器是否已初始化。
- 退货: 布尔
getServer()
获取底层WebServer实例以供高级使用。
- 退货:Web服务器\*
架构类
Schema类用于定义工具的输入参数模式。
构造函数
Schema()创建新的架构实例。
方法
addStringProperty(name, description, required)
将字符串属性添加到架构中。
- 参数:
- name (字符串):属性名称 - description (字符串):属性描述 - required (bool):该属性是否为必填项(默认值:true)
- 退货:无效
addStringEnumProperty(name, description, options, required)
将字符串枚举属性添加到架构中。
- 参数:
- name (字符串):属性名称 - description (字符串):属性描述 - options (String\[\]):允许值的数组 - required (bool):该属性是否为必填项(默认值:true)
- 退货:无效
addNumberProperty(name, description, required)
将数字属性添加到架构中。
- 参数:
- name (字符串):属性名称 - description (字符串):属性描述 - required (bool):该属性是否为必填项(默认值:true)
- 退货:无效
addNumberProperty(name, description, min, max, def, required)
将具有约束的数字属性添加到架构中。
- 参数:
- name (字符串):属性名称 - description (字符串):属性描述 - min (int):最小值 - max (int):最大值 - def (int):默认值 - required (bool):该属性是否为必填项(默认值:true)
- 退货:无效
addBooleanProperty(name, description, required)
将布尔属性添加到架构中。
- 参数:
- name (字符串):属性名称 - description (字符串):属性描述 - required (bool):该属性是否为必填项(默认值:true)
- 退货:无效
getSchema()
返回JSON模式文档。
- 退货:json文档
工具回调功能
工具回调具有以下签名:
void toolCallback(JsonObject arguments, JsonObject result)- 参数:
- arguments (JsonObject):从客户端输入参数 - result (JsonObject):要填充的结果对象(set result["text"] 对于响应)
- 退货:无效
例子
请参阅 examples/McpServerExample/ 一个完整示例的目录,演示:
- WiFi连接
- 服务器初始化
- 使用不同模式类型的工具注册
- 工具回调实现
MCP协议
此库实现了以下MCP方法:
initialize:初始化MCP连接tools/list:列出所有已注册的工具tools/call:调用已注册的工具
所有方法都遵循JSON-RPC 2.0规范,并返回适当的响应。
许可证
这个图书馆是基于https://github.com/MrLaki5/ESP32-MCP-air-conditioner
贡献
欢迎投稿!请随时提交pull请求或打开bug和功能请求的问题。
支持
对于任何错误报告或功能请求,请在存储库上打开问题。
