最近看到一个可自己电脑部署的备忘录系统 Memos( https://usememos.com/) . 单个文件, 可跨平台运行.
结合小智AI, 让我们可以通过语音自动添加一个备忘录.
这里需要购买一个ESPC3作为MCP服务响应.
流程就是: 小智 –> ESPC3 MCP –> Memos
ESPC3 我使用了Arduino, xiaozhi-mcp库.
有能力的人应该可以直接修改小智官方代码来实现. 通过MCP的好处是可以完全不修改小智本身来完成功能.
Arduino部份代码:
const String memos_url = “https://memos.scwy.net/api/v1/memos"
在你的Memos中添加 memos_token
// 添加备忘录
mcp.registerTool(
"add_memo",
"添加备忘录到服务器",
"{\"type\":\"object\",\"properties\":{\"content\":{\"type\":\"string\"},\"visibility\":{\"type\":\"string\",\"enum\":[\"PUBLIC\",\"PRIVATE\"]},\"state\":{\"type\":\"string\",\"enum\":[\"NORMAL\",\"ARCHIVED\"]}},\"required\":[\"content\"]}",
[](const String& args) {
DynamicJsonDocument doc(256);
deserializeJson(doc, args);
String content = doc["content"].as<String>();
String visibility = doc["visibility"].as<String>();
String state = doc["state"].as<String>();
// 设置默认值
if(visibility.isEmpty()) visibility = "PRIVATE";
if(state.isEmpty()) state = "NORMAL";
if(content!=""){
addMemo(content, visibility, state);
return WebSocketMCP::ToolResponse("{\"success\":true,\"message\":\"备忘录添加成功\"}");
} else {
return WebSocketMCP::ToolResponse("{\"success\":false,\"message\":\"请提供备忘录内容\"}");
}
}
);
// 添加备忘录
void addMemo(String content, String visibility, String state) {
// 检查WiFi连接状态
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
DEBUG_SERIAL.print("[POST] 发送备忘录到: ");
DEBUG_SERIAL.println(memos_url);
// 开始HTTP连接
if (http.begin(memos_url)) {
// 设置POST请求头
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", "Bearer " + String(memos_token));
// 构建JSON数据
DynamicJsonDocument doc(512);
doc["content"] = content;
doc["visibility"] = visibility;
doc["state"] = state;
String jsonData;
serializeJson(doc, jsonData);
DEBUG_SERIAL.print("发送的数据: ");
DEBUG_SERIAL.println(jsonData);
// 发送POST请求
int httpCode = http.POST(jsonData);
// 处理响应
if (httpCode > 0) {
DEBUG_SERIAL.printf("[POST] 响应代码: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
DEBUG_SERIAL.println("响应内容:");
DEBUG_SERIAL.println(payload);
} else {
DEBUG_SERIAL.printf("服务器返回错误代码: %d\n", httpCode);
}
} else {
DEBUG_SERIAL.printf("发送失败,错误: %s\n", http.errorToString(httpCode).c_str());
}
// 关闭HTTP连接
http.end();
} else {
DEBUG_SERIAL.println("[POST] 无法初始化HTTP连接");
}
} else {
DEBUG_SERIAL.println("WiFi未连接,无法发送备忘录请求");
}
}
打赏