(原) 让小智AI帮我们记点事

原创文章,请后转载,并注明出处。

最近看到一个可自己电脑部署的备忘录系统 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未连接,无法发送备忘录请求");
  }
}

相关文章