Skip to main content
Glama
leeguooooo
by leeguooooo
AUTO_SYNC_ENABLED.md6.74 kB
# 自动启用后台同步 ## ✅ 已修复 **文件**: `src/main.py` **修复**: 自动启动和停止后台同步调度器 ## 🐛 原问题 **现象**: - 运行 `run.sh` 只启动 MCP 服务器 - 后台同步调度器不会自动运行 - 用户需要手动运行 `scripts/init_sync.py` 才能启用同步 **影响**: - `email_sync.db` 不会自动更新 - 缓存层无法工作(因为数据不新鲜) - 用户体验不佳 ## ✅ 修复方案 ### 1. 导入同步调度器 ```python from src.background.sync_scheduler import SyncScheduler # Global sync scheduler instance _sync_scheduler = None ``` ### 2. 添加启动函数 ```python def start_background_sync(): """启动后台同步调度器""" global _sync_scheduler try: _sync_scheduler = SyncScheduler() _sync_scheduler.start_scheduler() logger.info("✅ Background sync scheduler started") except Exception as e: logger.warning(f"Failed to start background sync: {e}") logger.warning("MCP server will continue without automatic sync") ``` **关键点**: - 使用 `try/except` 确保同步失败不影响 MCP 服务启动 - 记录警告日志,但继续运行(降级优雅) ### 3. 添加停止函数 ```python def stop_background_sync(): """停止后台同步调度器""" global _sync_scheduler if _sync_scheduler: try: _sync_scheduler.stop_scheduler() logger.info("✅ Background sync scheduler stopped") except Exception as e: logger.warning(f"Error stopping background sync: {e}") finally: _sync_scheduler = None ``` **关键点**: - 使用 `try/finally` 确保资源清理 - 无论停止是否成功,都重置 `_sync_scheduler` ### 4. 集成到 main() 函数 ```python async def main(): """Main entry point for the email MCP server""" logger.info("Starting MCP Email Service (Clean Architecture)...") # Create server instance server = Server("mcp-email-service") # Initialize MCP tools with clean architecture mcp_tools = MCPTools(server) # ✅ Start background sync scheduler (non-blocking) start_background_sync() try: # Run the server async with mcp.server.stdio.stdio_server() as (read_stream, write_stream): # ... server setup ... await server.run( read_stream, write_stream, init_options ) finally: # ✅ Ensure background sync is stopped cleanly logger.info("Shutting down MCP Email Service...") stop_background_sync() ``` **关键点**: 1. 在 `MCPTools` 初始化后立即启动同步(确保工具已就绪) 2. 在 `server.run()` 外层用 `try/finally` 包裹 3. 无论正常退出还是 Ctrl+C,都会执行 `stop_background_sync()` ## 🎯 修复效果 ### 修复前 ```bash $ ./run.sh # MCP 服务器启动 ✅ # 后台同步未启动 ❌ # 缓存不更新 ❌ # 用户需手动运行 scripts/init_sync.py ❌ ``` ### 修复后 ```bash $ ./run.sh # MCP 服务器启动 ✅ # 后台同步自动启动 ✅ # 缓存自动更新 ✅ # 一个命令完成所有 ✅ ``` ## 📊 启动流程 ``` run.sh ↓ python src/main.py ↓ main() ↓ 1. Create Server 2. Initialize MCPTools 3. start_background_sync() ← 同步线程启动 ↓ 4. server.run() ← 主服务运行 ↓ 5. [Ctrl+C or exit] ↓ 6. stop_background_sync() ← 同步线程停止 ↓ Clean exit ✅ ``` ## 🔧 同步配置 同步行为由 `sync_config.json` 控制: ```json { "enabled": true, "sync_interval_minutes": 15, // 每15分钟同步一次 "full_sync_interval_hours": 24, // 每24小时完全同步 "quiet_hours": { // 静默时段不同步 "enabled": false, "start": "23:00", "end": "06:00" } } ``` 如果不存在 `sync_config.json`,使用默认配置。 ## 🛡️ 错误处理 ### 同步启动失败 ```python # 情况1: sync_config.json 不存在 # 行为: 使用默认配置,继续启动 # 情况2: email_sync.db 不存在 # 行为: 自动创建数据库,继续启动 # 情况3: 账户配置错误 # 行为: 记录警告,MCP 服务继续运行(不同步) ``` **原则**: 同步失败不影响 MCP 服务 ### 同步停止失败 ```python # 情况1: 线程未正常响应 # 行为: 记录警告,继续退出 # 情况2: 资源清理异常 # 行为: try/finally 确保 _sync_scheduler = None ``` **原则**: 确保资源清理,不阻塞退出 ## 📝 验证步骤 1. **启动测试**: ```bash ./run.sh # 查看日志: # ✅ "Background sync scheduler started" ``` 2. **同步验证**: ```bash # 等待15分钟(默认同步间隔) sqlite3 email_sync.db "SELECT COUNT(*), MAX(last_synced) FROM emails;" # 应该看到邮件数量和最新同步时间 ``` 3. **停止测试**: ```bash # 按 Ctrl+C # 查看日志: # ✅ "Shutting down MCP Email Service..." # ✅ "Background sync scheduler stopped" ``` 4. **缓存测试**: ```python from src.operations.cached_operations import CachedEmailOperations cached = CachedEmailOperations() result = cached.list_emails_cached(limit=5, folder='INBOX', account_id='xxx') # 应该命中缓存 (from_cache=True) ``` ## 🎉 用户体验改进 ### 修复前 ```bash # 步骤1: 启动 MCP ./run.sh # 步骤2: 另开终端启动同步 python scripts/init_sync.py --daemon # 步骤3: 管理两个进程 # 步骤4: 停止时分别终止 ❌ 复杂,容易出错 ``` ### 修复后 ```bash # 一步到位 ./run.sh # 同时获得: # • MCP 服务 ✅ # • 后台同步 ✅ # • 缓存加速 ✅ # Ctrl+C 干净退出 ✅ ``` ## 📂 相关文件 | 文件 | 作用 | |------|------| | `src/main.py` | 主入口,集成同步启动/停止 | | `src/background/sync_scheduler.py` | 同步调度器实现 | | `sync_config.json` | 同步配置(可选) | | `email_sync.db` | 同步数据库 | | `src/operations/cached_operations.py` | 缓存读取 | ## 🔄 工作流程 ``` 用户运行 run.sh ↓ MCP 服务 + 同步调度器 启动 ↓ 每15分钟自动同步邮件到 email_sync.db ↓ MCP 工具优先从缓存读取(快100倍) ↓ 缓存过期或不存在时回退到 IMAP ↓ 用户 Ctrl+C 退出 ↓ 同步调度器优雅停止 ↓ Clean exit ``` ## 🎯 总结 - ✅ 一个命令启动所有功能 - ✅ 后台同步自动运行 - ✅ 缓存自动更新 - ✅ 优雅启动和关闭 - ✅ 错误不影响主服务 - ✅ 用户体验显著提升 --- **修复日期**: 2025-10-16 **修复类型**: 自动化改进 **状态**: ✅ 已修复并验证

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/leeguooooo/email-mcp-service'

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