返回市场
ESP32 MCP服务器

ESP32 MCP服务器

作者:navado26 星标更新:2025-01-18

项目介绍

【技术文档摘要】

ESP32 MCP Server

这是一个针对ESP32微控制器的模型上下文协议(MCP)实现,提供基于WebSocket的接口用于资源发现和监控。

状态:无法编译,初始提交未修改

创建于Claude 3.5 Sonet的提交日期(带有自动格式化等显而易见的修复)

架构图

特性

  • MCP协议实现(v0.1.0)
  • 实时更新的WebSocket服务器
  • 资源发现和监控
  • 通过网页界面配置WiFi
  • 线程安全的请求处理
  • 完整的测试套件
  • 集成AsyncWebServer
  • 使用LittleFS支持配置存储

先决条件

硬件

  • ESP32 S3 DevKitC-1 开发板
  • 编程用USB线

软件

  • PlatformIO核心(命令行)或PlatformIO IDE
  • Python 3.7或更高版本
  • Git

架构

flowchart TD
    Start[启动应用程序] --> Setup[初始化]
    Setup -->|初始化文件系统| InitFS[初始化LittleFS]
    Setup -->|启动网络| StartNetwork[初始化网络管理器]
    Setup -->|创建任务| CreateTasks[创建并分配任务]

    subgraph 网络
        StartNetwork --> APCheck[检查AP或连接模式]
        APCheck -->|存在凭证| Connect[连接到WiFi]
        APCheck -->|无凭证| StartAP[启动接入点]
        Connect --> NetworkReady[网络就绪]
        StartAP --> NetworkReady
    end

    subgraph MCP服务器
        MCP[启动MCP服务器] --> HandleClient[处理客户端连接]
        HandleClient --> HandleRequest[处理请求]
        HandleRequest -->|WebSocket事件| WebSocket[处理WebSocket]
        HandleRequest -->|HTTP端点| HTTP[处理HTTP请求]
    end

    subgraph 指标
        self[启动指标系统] --> InitMetrics[初始化系统指标]
        InitMetrics --> CollectMetrics[定期收集指标]
        CollectMetrics --> SaveMetrics[将指标保存到文件系统]
    end

    subgraph 日志
        self[启动uLogger] --> LogMetrics[记录指标数据]
        LogMetrics --> CompactLogs[必要时压缩日志]
        CompactLogs -->|轮转日志| LogRotation
    end

    CreateTasks -->|网络任务| NetworkTask[在内核上运行网络任务]
    CreateTasks -->|MCP任务| MCPTask[在内核上运行MCP服务器任务]
    NetworkTask --> 网络
    MCPTask --> MCP服务器
    MCP服务器 --> 指标
    指标 --> 日志

安装

  1. 克隆仓库:
git clone https://github.com/yourusername/esp32-mcp-server.git
cd esp32-mcp-server
  1. 安装依赖项:
pio pkg install
  1. 构建并上传文件系统:
pio run -t uploadfs
  1. 构建并上传固件:
pio run -t upload

使用方法

初始设置

  1. 打开ESP32电源。它会创建一个名为"ESP32_XXXXXX"的接入点。
  2. 连接到该接入点。
  3. 导航至http://192.168.4.1
  4. 配置您的WiFi凭证。
  5. 设备将连接到您的网络。

MCP连接

使用WebSocket连接到端口9000上的MCP服务器:

const ws = new WebSocket('ws://YOUR_ESP32_IP:9000');

// 初始化连接
ws.send(JSON.stringify({
    jsonrpc: "2.0",
    method: "initialize",
    id: 1
}));

// 列出可用资源
ws.send(JSON.stringify({
    jsonrpc: "2.0",
    method: "resources/list",
    id: 2
}));

测试

运行测试套件:

# 运行所有测试
pio test -e native

# 运行特定测试
pio test -e native -f test_request_queue

# 带覆盖率运行
pio test -e native --coverage

贡献

  1. 分叉仓库
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m '添加神奇功能')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

本项目采用MIT许可证 - 详情请参阅LICENSE文件。