Skip to main content
Glama
mcp.md7.05 kB
# ESP-IDF MCP Server 设计文档 ## 1. 概述 ESP-IDF MCP Server 是一个基于 FastMCP 框架构建的服务,旨在为 ESP-IDF (Espressif IoT Development Framework) 开发者提供便捷的工具访问。该服务器通过 MCP (Model Control Protocol) 协议提供服务,允许客户端访问 ESP-IDF 的相关工具。 ## 2. 功能特性 ### 2.1 工具功能 - `get_esp_idf_version`: 获取当前安装的 ESP-IDF 版本信息 - `list_esp_targets`: 列出所有支持的 ESP 芯片型号 - `list_serial_ports`: 列出系统中的串口设备 - `select_serial_port`: 选择ESP-IDF操作的目标串口 - `get_selected_serial_port`: 获取当前选择的串口设备 - `compile_project`: 编译ESP-IDF项目 - `clean_project`: 清理ESP-IDF项目 ## 3. 架构设计 ### 3.1 系统架构 ``` +------------------+ MCP Protocol +------------------+ | MCP Client | <-----------------> | ESP-IDF MCP Server| +------------------+ +------------------+ | FastMCP Core | +------------------+ | Tool Functions | +------------------+ | ESP-IDF Tools | +------------------+ ``` ### 3.2 核心组件 #### 3.2.1 FastMCP Server 基于 FastMCP 框架构建的服务器实例,负责: - 注册和管理工具函数 - 处理 MCP 客户端请求 - 提供 HTTP 接口 #### 3.2.2 工具函数模块 实现各种 ESP-IDF 相关的工具函数,包括: - 系统信息查询工具 - 串口设备管理工具 - 项目编译和清理工具 ### 3.3 项目结构 ``` espidf-mcp/ ├── app.py # 主入口点 ├── core/ # 核心配置模块 │ ├── config.py # FastMCP实例和ESP-IDF环境初始化 ├── docs/ # 文档 ├── fastmcp.json # FastMCP配置文件 ├── requirements.txt # 依赖列表 ├── simple_server.py # 旧版服务器实现(已废弃) ├── tools/ # 工具函数模块 │ ├── esp_idf_tools.py # ESP-IDF相关工具 │ ├── serial_tools.py # 串口设备相关工具 └── tests/ # 测试文件 ``` ## 4. API 接口 ### 4.1 工具接口 #### get_esp_idf_version - **描述**: 获取当前安装的 ESP-IDF 版本信息 - **参数**: 无 - **返回值**: ESP-IDF 版本信息字符串 #### list_esp_targets - **描述**: 列出所有支持的 ESP 芯片型号 - **参数**: 无 - **返回值**: 支持的 ESP 芯片型号列表 #### list_serial_ports - **描述**: 列出系统中所有包含有效描述的串口设备(过滤掉描述为'n/a'的设备) - **参数**: 无 - **返回值**: 串口设备列表,每个设备包含设备路径、描述和硬件ID #### select_serial_port - **描述**: 选择ESP-IDF操作的目标串口设备,该选择将对所有需要串口操作的工具生效 - **参数**: `port_device` (str) - 要选择的串口设备路径 - **返回值**: 成功选择的确认消息 #### get_selected_serial_port - **描述**: 获取当前选择的串口设备 - **参数**: 无 - **返回值**: 当前选择的串口设备路径,如果没有选择则返回"No port selected" #### compile_project - **描述**: 编译指定路径的ESP-IDF项目,返回编译过程的标准输出和标准错误 - **参数**: `project_path` (str) - ESP-IDF项目的路径 - **返回值**: 包含返回码、标准输出和标准错误的字典 #### clean_project - **描述**: 清理指定路径的ESP-IDF项目 - **参数**: `project_path` (str) - ESP-IDF项目的路径 - **返回值**: 包含返回码、标准输出和标准错误的字典 ## 5. 部署与配置 ### 5.1 环境要求 - Python 3.8 或更高版本 - FastMCP 库 - ESP-IDF 开发环境 (位于 `~/esp/esp-idf`) ### 5.2 ESP-IDF 路径约定 ESP-IDF 必须安装在用户的主目录下的 `esp/esp-idf` 文件夹中,即: ``` ~/esp/esp-idf/ ``` ### 5.3 环境变量初始化 服务器在启动时会使用 ESP-IDF 提供的 `export.sh` 脚本来初始化环境变量,而不是在每次工具调用时重新初始化,以提高性能: - 脚本路径: `~/esp/esp-idf/export.sh` - 此脚本会设置所有必要的环境变量,包括 `IDF_PATH`、`PATH` 以及工具链相关的变量 - 环境变量在服务器启动时初始化一次,并在所有工具调用中复用 ### 5.4 安装步骤 1. 克隆项目代码: ```bash git clone <repository_url> cd espidf-mcp ``` 2. 安装依赖: ```bash pip install -r requirements.txt ``` 3. 确保 ESP-IDF 安装在正确路径: ``` ~/esp/esp-idf/ ``` 4. 确保 `~/esp/esp-idf/export.sh` 脚本存在且可执行 ### 5.5 运行服务器 有两种方式运行server: #### 方法1:直接运行Python文件 ```bash python app.py ``` 这将在`http://127.0.0.1:8080`上启动HTTP服务器。 #### 方法2:使用fastmcp配置文件(推荐) ```bash fastmcp run fastmcp.json ``` 这种方法使用声明式配置文件来定义服务器参数。 ### 5.6 自定义配置 可以通过以下方式自定义服务器配置: 1. 修改`app.py`文件中的`mcp.run()`参数: ```python mcp.run(transport="streamable-http", host="127.0.0.1", port=8080) ``` 2. 编辑`fastmcp.json`配置文件: ```json { "mcpServers": { "esp-idf-server": { "command": "python", "args": ["app.py"], "transport": "streamable-http", "url": "http://127.0.0.1:8080" } } } ``` 可以更改host、port或transport类型来满足具体需求。 ## 6. 使用说明 ### 6.1 连接服务器 MCP 客户端可以通过 `http://127.0.0.1:8080/mcp` 连接到服务器。 ### 6.2 调用工具 客户端可以列出并调用已注册的工具函数: - `get_esp_idf_version` - `list_esp_targets` - `list_serial_ports` - `select_serial_port` - `get_selected_serial_port` - `compile_project` - `clean_project` ## 7. 扩展与定制 ### 7.1 添加新工具 在 `app.py` 中使用 `@mcp.tool` 装饰器添加新的工具函数。 ## 8. 故障排除 ### 8.1 服务器无法启动 - 检查 Python 环境和依赖是否正确安装 - 确认端口 8080 未被占用 - 检查`fastmcp.json`配置文件是否正确 ### 8.2 工具调用失败 - 检查 ESP-IDF 是否正确安装在 `~/esp/esp-idf` 路径 - 确认 `~/esp/esp-idf/export.sh` 脚本存在且可执行 - 检查环境变量是否正确设置 ### 8.3 串口相关问题 - 确认用户具有访问串口设备的权限(通常需要将用户添加到`dialout`组) - 检查串口设备是否被其他程序占用 - 在某些系统上,可能需要安装额外的驱动程序 ### 8.4 编译项目失败 - 确认项目路径正确且包含有效的ESP-IDF项目结构 - 检查项目是否已正确配置目标芯片 - 确认有足够的磁盘空间和内存进行编译

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jasper-zsh/espidf-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server