mobile-mcp-ai 2.6.10__tar.gz → 2.6.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. {mobile_mcp_ai-2.6.10/mobile_mcp_ai.egg-info → mobile_mcp_ai-2.6.12}/PKG-INFO +19 -12
  2. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/README.md +18 -11
  3. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/config.py +32 -0
  4. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/basic_tools_lite.py +801 -1823
  5. mobile_mcp_ai-2.6.12/core/tool_selection_helper.py +168 -0
  6. mobile_mcp_ai-2.6.12/docs/EXECUTION_BEST_PRACTICES.md +230 -0
  7. mobile_mcp_ai-2.6.12/docs/STRATEGY_SUMMARY.md +129 -0
  8. mobile_mcp_ai-2.6.12/docs/TOOL_SELECTION_STRATEGY.md +208 -0
  9. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mcp_tools/mcp_server.py +337 -455
  10. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12/mobile_mcp_ai.egg-info}/PKG-INFO +19 -12
  11. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mobile_mcp_ai.egg-info/SOURCES.txt +5 -0
  12. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/setup.py +1 -1
  13. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/LICENSE +0 -0
  14. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/MANIFEST.in +0 -0
  15. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/__init__.py +0 -0
  16. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/__init__.py +0 -0
  17. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/device_manager.py +0 -0
  18. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/dynamic_config.py +0 -0
  19. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/ios_client_wda.py +0 -0
  20. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/ios_device_manager_wda.py +0 -0
  21. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/mobile_client.py +0 -0
  22. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/template_matcher.py +0 -0
  23. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/templates/close_buttons/auto_x_0112_151217.png +0 -0
  24. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/templates/close_buttons/auto_x_0112_152037.png +0 -0
  25. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/templates/close_buttons/auto_x_0112_152840.png +0 -0
  26. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/templates/close_buttons/auto_x_0112_153256.png +0 -0
  27. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/templates/close_buttons/auto_x_0112_154847.png +0 -0
  28. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/templates/close_buttons/gray_x_stock_ad.png +0 -0
  29. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/utils/__init__.py +0 -0
  30. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/utils/logger.py +0 -0
  31. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/utils/operation_history_manager.py +0 -0
  32. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/core/utils/smart_wait.py +0 -0
  33. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/docs/iOS_SETUP_GUIDE.md +0 -0
  34. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mcp_tools/__init__.py +0 -0
  35. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mobile_mcp_ai.egg-info/dependency_links.txt +0 -0
  36. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mobile_mcp_ai.egg-info/entry_points.txt +0 -0
  37. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mobile_mcp_ai.egg-info/not-zip-safe +0 -0
  38. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mobile_mcp_ai.egg-info/requires.txt +0 -0
  39. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/mobile_mcp_ai.egg-info/top_level.txt +0 -0
  40. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/requirements.txt +0 -0
  41. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/setup.cfg +0 -0
  42. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/templates/close_buttons/auto_x_0112_151217.png +0 -0
  43. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/templates/close_buttons/auto_x_0112_152037.png +0 -0
  44. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/templates/close_buttons/auto_x_0112_152840.png +0 -0
  45. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/templates/close_buttons/auto_x_0112_153256.png +0 -0
  46. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/templates/close_buttons/auto_x_0112_154847.png +0 -0
  47. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/templates/close_buttons/gray_x_stock_ad.png +0 -0
  48. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/utils/__init__.py +0 -0
  49. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/utils/logger.py +0 -0
  50. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/utils/xml_formatter.py +0 -0
  51. {mobile_mcp_ai-2.6.10 → mobile_mcp_ai-2.6.12}/utils/xml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mobile-mcp-ai
3
- Version: 2.6.10
3
+ Version: 2.6.12
4
4
  Summary: 移动端自动化 MCP Server - 支持 Android/iOS,AI 功能可选(基础工具不需要 AI)
5
5
  Home-page: https://github.com/test111ddff-hash/mobile-mcp-ai
6
6
  Author: douzi
@@ -404,17 +404,24 @@ tidevice list
404
404
 
405
405
  ## 🛠️ 工具列表
406
406
 
407
- | 类别 | 工具 | 说明 |
408
- |:---:|------|------|
409
- | 📋 | `mobile_list_elements` | 列出页面元素 |
410
- | 📸 | `mobile_take_screenshot` | 截图 |
411
- | 📸 | `mobile_screenshot_with_som` | Set-of-Mark 截图(智能标注) |
412
- | 📸 | `mobile_screenshot_with_grid` | 带网格坐标的截图 |
413
- | 📐 | `mobile_get_screen_size` | 屏幕尺寸 |
414
- | 👆 | `mobile_click_by_text` | 文本点击 |
415
- | 👆 | `mobile_click_by_id` | ID 点击 |
416
- | 👆 | `mobile_click_at_coords` | 坐标点击 |
417
- | 👆 | `mobile_click_by_percent` | 百分比点击 |
407
+ | 类别 | 工具 | 说明 | 优先级 |
408
+ |:---:|------|------|:---:|
409
+ | 📋 | `mobile_list_elements` | 列出页面元素 | ⭐⭐⭐ 第一优先级 |
410
+ | 👆 | `mobile_click_by_text` | 文本点击 | ⭐⭐⭐ 第一优先级 |
411
+ | 👆 | `mobile_click_by_id` | ID 点击 | ⭐⭐⭐ 第一优先级 |
412
+ | 📸 | `mobile_screenshot_with_som` | Set-of-Mark 截图(智能标注) | ⚠️ 兜底方案 |
413
+ | 📸 | `mobile_take_screenshot` | 截图 | ⚠️ 兜底方案 |
414
+ | 📸 | `mobile_screenshot_with_grid` | 带网格坐标的截图 | ⚠️ 兜底方案 |
415
+ | 👆 | `mobile_click_by_som` | SoM 编号点击 | ⚠️ 兜底方案 |
416
+ | 👆 | `mobile_click_by_percent` | 百分比点击 | ⚠️ 最后兜底 |
417
+ | 👆 | `mobile_click_at_coords` | 坐标点击 | ⚠️ 最后兜底 |
418
+ | 📐 | `mobile_get_screen_size` | 屏幕尺寸 | 辅助工具 |
419
+
420
+ > 💡 **工具选择策略**:优先使用控件树定位(`list_elements` + `click_by_text/id`),截图仅作为兜底方案。
421
+ >
422
+ > 📖 详细指南:
423
+ > - [工具选择策略指南](docs/TOOL_SELECTION_STRATEGY.md) - 详细的工具选择策略和决策树
424
+ > - [用例执行最佳实践](docs/EXECUTION_BEST_PRACTICES.md) - 用例执行流程和优化建议
418
425
  | 👆 | `mobile_click_by_som` | SoM 编号点击 |
419
426
  | 👆 | `mobile_long_press_by_id` | ID 长按 |
420
427
  | 👆 | `mobile_long_press_by_text` | 文本长按 |
@@ -333,17 +333,24 @@ tidevice list
333
333
 
334
334
  ## 🛠️ 工具列表
335
335
 
336
- | 类别 | 工具 | 说明 |
337
- |:---:|------|------|
338
- | 📋 | `mobile_list_elements` | 列出页面元素 |
339
- | 📸 | `mobile_take_screenshot` | 截图 |
340
- | 📸 | `mobile_screenshot_with_som` | Set-of-Mark 截图(智能标注) |
341
- | 📸 | `mobile_screenshot_with_grid` | 带网格坐标的截图 |
342
- | 📐 | `mobile_get_screen_size` | 屏幕尺寸 |
343
- | 👆 | `mobile_click_by_text` | 文本点击 |
344
- | 👆 | `mobile_click_by_id` | ID 点击 |
345
- | 👆 | `mobile_click_at_coords` | 坐标点击 |
346
- | 👆 | `mobile_click_by_percent` | 百分比点击 |
336
+ | 类别 | 工具 | 说明 | 优先级 |
337
+ |:---:|------|------|:---:|
338
+ | 📋 | `mobile_list_elements` | 列出页面元素 | ⭐⭐⭐ 第一优先级 |
339
+ | 👆 | `mobile_click_by_text` | 文本点击 | ⭐⭐⭐ 第一优先级 |
340
+ | 👆 | `mobile_click_by_id` | ID 点击 | ⭐⭐⭐ 第一优先级 |
341
+ | 📸 | `mobile_screenshot_with_som` | Set-of-Mark 截图(智能标注) | ⚠️ 兜底方案 |
342
+ | 📸 | `mobile_take_screenshot` | 截图 | ⚠️ 兜底方案 |
343
+ | 📸 | `mobile_screenshot_with_grid` | 带网格坐标的截图 | ⚠️ 兜底方案 |
344
+ | 👆 | `mobile_click_by_som` | SoM 编号点击 | ⚠️ 兜底方案 |
345
+ | 👆 | `mobile_click_by_percent` | 百分比点击 | ⚠️ 最后兜底 |
346
+ | 👆 | `mobile_click_at_coords` | 坐标点击 | ⚠️ 最后兜底 |
347
+ | 📐 | `mobile_get_screen_size` | 屏幕尺寸 | 辅助工具 |
348
+
349
+ > 💡 **工具选择策略**:优先使用控件树定位(`list_elements` + `click_by_text/id`),截图仅作为兜底方案。
350
+ >
351
+ > 📖 详细指南:
352
+ > - [工具选择策略指南](docs/TOOL_SELECTION_STRATEGY.md) - 详细的工具选择策略和决策树
353
+ > - [用例执行最佳实践](docs/EXECUTION_BEST_PRACTICES.md) - 用例执行流程和优化建议
347
354
  | 👆 | `mobile_click_by_som` | SoM 编号点击 |
348
355
  | 👆 | `mobile_long_press_by_id` | ID 长按 |
349
356
  | 👆 | `mobile_long_press_by_text` | 文本长按 |
@@ -102,6 +102,31 @@ class Config:
102
102
  "false"
103
103
  ).lower() == "true"
104
104
 
105
+ # ==================== Token 优化(省钱模式)====================
106
+ # 启用 Token 优化(默认开启,只精简格式,不影响准确度)
107
+ TOKEN_OPTIMIZATION_ENABLED: bool = os.getenv(
108
+ "TOKEN_OPTIMIZATION_ENABLED",
109
+ "true"
110
+ ).lower() == "true"
111
+
112
+ # list_elements 最大返回元素数量(默认 0 = 不限制,确保准确度)
113
+ MAX_ELEMENTS_RETURN: int = int(os.getenv("MAX_ELEMENTS_RETURN", "0"))
114
+
115
+ # take_screenshot_with_som 最大返回元素数量(默认 0 = 不限制)
116
+ MAX_SOM_ELEMENTS_RETURN: int = int(os.getenv("MAX_SOM_ELEMENTS_RETURN", "0"))
117
+
118
+ # 精简返回信息(只移除冗余提示文字,不影响数据)
119
+ COMPACT_RESPONSE: bool = os.getenv(
120
+ "COMPACT_RESPONSE",
121
+ "true"
122
+ ).lower() == "true"
123
+
124
+ # 精简工具描述(减少每次请求的 token)
125
+ COMPACT_TOOL_DESCRIPTION: bool = os.getenv(
126
+ "COMPACT_TOOL_DESCRIPTION",
127
+ "true"
128
+ ).lower() == "true"
129
+
105
130
  @classmethod
106
131
  def get_ai_platform(cls) -> Optional[str]:
107
132
  """获取优先使用的AI平台"""
@@ -137,6 +162,13 @@ class Config:
137
162
  "device": {
138
163
  "default_device_id": cls.DEFAULT_DEVICE_ID,
139
164
  "lock_orientation": cls.LOCK_SCREEN_ORIENTATION,
165
+ },
166
+ "token_optimization": {
167
+ "enabled": cls.TOKEN_OPTIMIZATION_ENABLED,
168
+ "max_elements": cls.MAX_ELEMENTS_RETURN,
169
+ "max_som_elements": cls.MAX_SOM_ELEMENTS_RETURN,
170
+ "compact_response": cls.COMPACT_RESPONSE,
171
+ "compact_tool_desc": cls.COMPACT_TOOL_DESCRIPTION,
140
172
  }
141
173
  }
142
174