#!/usr/bin/env python3
"""
Configuration and initialization module for ESP-IDF MCP Server
"""
import fastmcp
import os
import subprocess
from pathlib import Path
# 创建 FastMCP 实例
mcp = fastmcp.FastMCP(name="ESP-IDF Helper Server")
# ESP-IDF路径约定
ESP_IDF_PATH = Path.home() / "esp/esp-idf"
SOURCE_SCRIPT = ESP_IDF_PATH / "export.sh"
# 全局环境变量
ESP_IDF_ENV = None
def init_esp_idf_env():
"""使用ESP-IDF的export.sh脚本初始化环境变量"""
global ESP_IDF_ENV
# 如果已初始化,直接返回
if ESP_IDF_ENV is not None:
return ESP_IDF_ENV
# 检查export.sh是否存在
if not SOURCE_SCRIPT.exists():
raise FileNotFoundError(f"ESP-IDF export.sh script not found at {SOURCE_SCRIPT}")
# 使用bash执行source命令并输出环境变量
command = f"source {SOURCE_SCRIPT} >/dev/null 2>&1 && env"
result = subprocess.run(
command,
shell=True,
capture_output=True,
text=True,
executable='/bin/bash'
)
if result.returncode != 0:
raise RuntimeError(f"Failed to source ESP-IDF environment: {result.stderr}")
# 解析环境变量
env = {}
for line in result.stdout.splitlines():
if '=' in line:
key, value = line.split('=', 1)
# 忽略空键或只包含空白字符的键
if key.strip():
env[key] = value
# 保存环境变量
ESP_IDF_ENV = env
return env
# 在服务启动时初始化ESP-IDF环境变量
try:
init_esp_idf_env()
print("ESP-IDF environment initialized successfully")
except Exception as e:
print(f"Warning: Failed to initialize ESP-IDF environment: {e}")