mobster-cli 0.4.3__py3-none-any.whl

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 (1009) hide show
  1. mobile_agent/__init__.py +4 -0
  2. mobile_agent/__main__.py +598 -0
  3. mobile_agent/accounts/__init__.py +1 -0
  4. mobile_agent/accounts/context.py +80 -0
  5. mobile_agent/accounts/mcp.py +55 -0
  6. mobile_agent/accounts/pacing.py +318 -0
  7. mobile_agent/accounts/register.py +78 -0
  8. mobile_agent/accounts/routes.py +212 -0
  9. mobile_agent/accounts/routing.py +69 -0
  10. mobile_agent/accounts/screen.py +273 -0
  11. mobile_agent/accounts/stats.py +54 -0
  12. mobile_agent/accounts/store.py +394 -0
  13. mobile_agent/agent_hooks.py +123 -0
  14. mobile_agent/ai_plans/__init__.py +7 -0
  15. mobile_agent/ai_plans/agents.py +96 -0
  16. mobile_agent/ai_plans/claude_code.py +208 -0
  17. mobile_agent/ai_plans/cli.py +400 -0
  18. mobile_agent/ai_plans/codex.py +258 -0
  19. mobile_agent/ai_plans/compat_chat.py +307 -0
  20. mobile_agent/ai_plans/device_login.py +164 -0
  21. mobile_agent/ai_plans/draft_client.py +68 -0
  22. mobile_agent/ai_plans/gemini.py +137 -0
  23. mobile_agent/ai_plans/instructions.py +65 -0
  24. mobile_agent/ai_plans/mcp_http.py +160 -0
  25. mobile_agent/ai_plans/phone_tools.py +892 -0
  26. mobile_agent/ai_plans/providers.py +235 -0
  27. mobile_agent/ai_plans/routes.py +160 -0
  28. mobile_agent/ai_plans/runner.py +400 -0
  29. mobile_agent/ai_plans/vault.py +114 -0
  30. mobile_agent/alerts.py +337 -0
  31. mobile_agent/android/__init__.py +18 -0
  32. mobile_agent/android/adb.py +268 -0
  33. mobile_agent/android/conditions.py +128 -0
  34. mobile_agent/android/doctor.py +54 -0
  35. mobile_agent/android/driver.py +137 -0
  36. mobile_agent/android/emulator.py +216 -0
  37. mobile_agent/android/logs.py +85 -0
  38. mobile_agent/android/manager.py +225 -0
  39. mobile_agent/android/records.py +31 -0
  40. mobile_agent/android/tree.py +96 -0
  41. mobile_agent/answer_shapes.py +230 -0
  42. mobile_agent/api_devices.py +333 -0
  43. mobile_agent/api_errors.py +17 -0
  44. mobile_agent/api_get.py +249 -0
  45. mobile_agent/api_http.py +467 -0
  46. mobile_agent/api_post.py +453 -0
  47. mobile_agent/api_routes.py +173 -0
  48. mobile_agent/app_api/__init__.py +4 -0
  49. mobile_agent/app_api/cli.py +151 -0
  50. mobile_agent/app_api/endpoints.py +193 -0
  51. mobile_agent/app_api/mcp.py +54 -0
  52. mobile_agent/app_api/openapi.py +146 -0
  53. mobile_agent/app_api/reading.py +172 -0
  54. mobile_agent/app_api/register.py +10 -0
  55. mobile_agent/app_api/screen.py +216 -0
  56. mobile_agent/app_api/service.py +382 -0
  57. mobile_agent/app_api/sessions.py +404 -0
  58. mobile_agent/app_api/tokens.py +167 -0
  59. mobile_agent/app_choice.py +131 -0
  60. mobile_agent/app_icons.py +183 -0
  61. mobile_agent/app_killer.py +69 -0
  62. mobile_agent/artifacts.py +606 -0
  63. mobile_agent/attach/__init__.py +13 -0
  64. mobile_agent/attach/cli.py +46 -0
  65. mobile_agent/attach/flutter.py +28 -0
  66. mobile_agent/attach/score.py +119 -0
  67. mobile_agent/attach/web.py +13 -0
  68. mobile_agent/attachments/__init__.py +1 -0
  69. mobile_agent/attachments/agent.py +418 -0
  70. mobile_agent/attachments/extract.py +217 -0
  71. mobile_agent/attachments/mcp.py +104 -0
  72. mobile_agent/attachments/register.py +73 -0
  73. mobile_agent/attachments/routes.py +326 -0
  74. mobile_agent/attachments/service.py +170 -0
  75. mobile_agent/attachments/sniff.py +152 -0
  76. mobile_agent/attachments/store.py +441 -0
  77. mobile_agent/audit_verify.py +436 -0
  78. mobile_agent/bench/README.md +410 -0
  79. mobile_agent/bench/__init__.py +0 -0
  80. mobile_agent/bench/__main__.py +394 -0
  81. mobile_agent/bench/ab.py +168 -0
  82. mobile_agent/bench/actuation.py +368 -0
  83. mobile_agent/bench/agents/__init__.py +9 -0
  84. mobile_agent/bench/agents/base.py +105 -0
  85. mobile_agent/bench/agents/plan_clients.py +245 -0
  86. mobile_agent/bench/agents/smart.py +533 -0
  87. mobile_agent/bench/checks.py +358 -0
  88. mobile_agent/bench/decide_gate.py +214 -0
  89. mobile_agent/bench/diagnose.py +181 -0
  90. mobile_agent/bench/evals/__init__.py +14 -0
  91. mobile_agent/bench/evals/build.py +565 -0
  92. mobile_agent/bench/evals/checkpoint.py +214 -0
  93. mobile_agent/bench/evals/irt.py +219 -0
  94. mobile_agent/bench/evals/l0.py +647 -0
  95. mobile_agent/bench/evals/l1.py +866 -0
  96. mobile_agent/bench/evals/models.py +124 -0
  97. mobile_agent/bench/evals/pairwise.py +189 -0
  98. mobile_agent/bench/evals/proxy.py +90 -0
  99. mobile_agent/bench/evals/sets.py +149 -0
  100. mobile_agent/bench/evals/traces.py +446 -0
  101. mobile_agent/bench/fixtures.py +176 -0
  102. mobile_agent/bench/guard_replay.py +129 -0
  103. mobile_agent/bench/h2-manifest.json +20 -0
  104. mobile_agent/bench/h3-manifest.json +20 -0
  105. mobile_agent/bench/heldout-manifest.json +32 -0
  106. mobile_agent/bench/heldout.py +375 -0
  107. mobile_agent/bench/iosworld.py +901 -0
  108. mobile_agent/bench/iosworld_stats.py +510 -0
  109. mobile_agent/bench/llm_units.py +116 -0
  110. mobile_agent/bench/manifest.json +93 -0
  111. mobile_agent/bench/metrics.py +66 -0
  112. mobile_agent/bench/phone.py +44 -0
  113. mobile_agent/bench/replay.py +172 -0
  114. mobile_agent/bench/report.py +207 -0
  115. mobile_agent/bench/runner.py +456 -0
  116. mobile_agent/bench/safety.py +310 -0
  117. mobile_agent/bench/stream_timing.py +213 -0
  118. mobile_agent/bench/suite.py +444 -0
  119. mobile_agent/bench/sweep.py +176 -0
  120. mobile_agent/bench/tape.py +798 -0
  121. mobile_agent/bench/tape_replay.py +88 -0
  122. mobile_agent/bench/trace_evals.py +128 -0
  123. mobile_agent/bench/trace_view.py +81 -0
  124. mobile_agent/bench/truth/iphone15pro.json +138 -0
  125. mobile_agent/bench/truth.py +340 -0
  126. mobile_agent/bench/tuning.py +543 -0
  127. mobile_agent/bench/tuning_analysis.py +656 -0
  128. mobile_agent/bench/vague-heldout-manifest.json +12 -0
  129. mobile_agent/bench/vague_rubric.py +135 -0
  130. mobile_agent/bench/vague_run.py +243 -0
  131. mobile_agent/brand.py +454 -0
  132. mobile_agent/brand_fonts.py +756 -0
  133. mobile_agent/build_identity.py +21 -0
  134. mobile_agent/cable_bt.py +623 -0
  135. mobile_agent/cable_bt_runtime.py +128 -0
  136. mobile_agent/catalog.py +69 -0
  137. mobile_agent/chart_svg.py +415 -0
  138. mobile_agent/chat_here.py +189 -0
  139. mobile_agent/cli_constants.py +5 -0
  140. mobile_agent/cli_parser.py +611 -0
  141. mobile_agent/cli_run.py +115 -0
  142. mobile_agent/compiled_read/__init__.py +21 -0
  143. mobile_agent/compiled_read/delta.py +89 -0
  144. mobile_agent/compiled_read/extractors.py +202 -0
  145. mobile_agent/compiled_read/routes.py +56 -0
  146. mobile_agent/completion.py +267 -0
  147. mobile_agent/compose.py +48 -0
  148. mobile_agent/config.py +114 -0
  149. mobile_agent/connectors/__init__.py +1 -0
  150. mobile_agent/connectors/api_session.py +76 -0
  151. mobile_agent/connectors/callback_page.py +146 -0
  152. mobile_agent/connectors/client.py +582 -0
  153. mobile_agent/connectors/github_app.py +55 -0
  154. mobile_agent/connectors/graph_api.py +396 -0
  155. mobile_agent/connectors/imports.py +170 -0
  156. mobile_agent/connectors/issue.py +66 -0
  157. mobile_agent/connectors/keystore.py +85 -0
  158. mobile_agent/connectors/marks.py +222 -0
  159. mobile_agent/connectors/oauth.py +476 -0
  160. mobile_agent/connectors/picker.py +228 -0
  161. mobile_agent/connectors/presets.py +591 -0
  162. mobile_agent/connectors/register.py +48 -0
  163. mobile_agent/connectors/routes.py +153 -0
  164. mobile_agent/connectors/service.py +966 -0
  165. mobile_agent/connectors/shared.py +136 -0
  166. mobile_agent/connectors/skill.py +446 -0
  167. mobile_agent/connectors/slack_api.py +269 -0
  168. mobile_agent/connectors/steps.py +92 -0
  169. mobile_agent/connectors/store.py +144 -0
  170. mobile_agent/connectors/vault.py +72 -0
  171. mobile_agent/console.py +178 -0
  172. mobile_agent/content_queue/__init__.py +1 -0
  173. mobile_agent/content_queue/client.py +263 -0
  174. mobile_agent/content_queue/importing.py +153 -0
  175. mobile_agent/content_queue/media_check.py +224 -0
  176. mobile_agent/content_queue/prompt.py +64 -0
  177. mobile_agent/content_queue/register.py +91 -0
  178. mobile_agent/content_queue/routes.py +370 -0
  179. mobile_agent/content_queue/runner.py +475 -0
  180. mobile_agent/content_queue/store.py +521 -0
  181. mobile_agent/contract.py +996 -0
  182. mobile_agent/contract_asks.py +248 -0
  183. mobile_agent/contract_prompt.py +45 -0
  184. mobile_agent/contract_screen.py +981 -0
  185. mobile_agent/contract_view.py +84 -0
  186. mobile_agent/corpus/__init__.py +26 -0
  187. mobile_agent/corpus/cli.py +63 -0
  188. mobile_agent/corpus/consent.py +55 -0
  189. mobile_agent/corpus/listener.py +76 -0
  190. mobile_agent/corpus/register.py +9 -0
  191. mobile_agent/corpus/skeleton.py +72 -0
  192. mobile_agent/corpus/store.py +143 -0
  193. mobile_agent/costs.py +161 -0
  194. mobile_agent/decider_scope.py +40 -0
  195. mobile_agent/decision_provider.py +189 -0
  196. mobile_agent/deeplinks.py +352 -0
  197. mobile_agent/device_info.py +116 -0
  198. mobile_agent/device_manager.py +978 -0
  199. mobile_agent/device_status.py +195 -0
  200. mobile_agent/device_targets.py +217 -0
  201. mobile_agent/devices.py +676 -0
  202. mobile_agent/devkit/__init__.py +64 -0
  203. mobile_agent/devkit/account_cli.py +90 -0
  204. mobile_agent/devkit/asc.py +562 -0
  205. mobile_agent/devkit/asc_cli.py +214 -0
  206. mobile_agent/devkit/ci.py +737 -0
  207. mobile_agent/devkit/ci_cli.py +196 -0
  208. mobile_agent/devkit/ci_hosts.py +194 -0
  209. mobile_agent/devkit/es256.py +197 -0
  210. mobile_agent/devkit/expo.py +440 -0
  211. mobile_agent/devkit/expo_cli.py +405 -0
  212. mobile_agent/devkit/expo_dev.py +203 -0
  213. mobile_agent/devkit/expo_routes.py +90 -0
  214. mobile_agent/devkit/fixtures_cli.py +133 -0
  215. mobile_agent/devkit/fixtures_routes.py +82 -0
  216. mobile_agent/devkit/links.py +375 -0
  217. mobile_agent/devkit/links_cli.py +123 -0
  218. mobile_agent/devkit/links_routes.py +83 -0
  219. mobile_agent/devkit/nightly.py +152 -0
  220. mobile_agent/devkit/shots.py +203 -0
  221. mobile_agent/devkit/testflight.py +155 -0
  222. mobile_agent/devkit/testflight_cli.py +127 -0
  223. mobile_agent/devkit/testflight_routes.py +111 -0
  224. mobile_agent/devkit/xcode.py +236 -0
  225. mobile_agent/devkit/xcode_cli.py +101 -0
  226. mobile_agent/devtools.py +419 -0
  227. mobile_agent/doctor.py +509 -0
  228. mobile_agent/doctor_fix.py +467 -0
  229. mobile_agent/downloads.py +55 -0
  230. mobile_agent/drivers.py +793 -0
  231. mobile_agent/dry_run.py +102 -0
  232. mobile_agent/effect_ledger.py +83 -0
  233. mobile_agent/engine_health.py +378 -0
  234. mobile_agent/engine_hooks.py +96 -0
  235. mobile_agent/engines.py +408 -0
  236. mobile_agent/env_file.py +63 -0
  237. mobile_agent/env_secrets.py +149 -0
  238. mobile_agent/errors.py +15 -0
  239. mobile_agent/evals/__init__.py +3 -0
  240. mobile_agent/evals/app_survey.py +149 -0
  241. mobile_agent/evals/development/__init__.py +1 -0
  242. mobile_agent/evals/development/score.py +276 -0
  243. mobile_agent/evals/latency_report.py +312 -0
  244. mobile_agent/evals/offline_report.py +374 -0
  245. mobile_agent/evals/oracles.py +298 -0
  246. mobile_agent/evals/redteam/__init__.py +15 -0
  247. mobile_agent/evals/redteam/__main__.py +72 -0
  248. mobile_agent/evals/redteam/cases.py +730 -0
  249. mobile_agent/evals/redteam/harness.py +604 -0
  250. mobile_agent/evals/redteam/live.py +139 -0
  251. mobile_agent/evals/redteam/plain.py +85 -0
  252. mobile_agent/evals/vision/__init__.py +0 -0
  253. mobile_agent/evals/vision/images/dog_001.jpg +0 -0
  254. mobile_agent/evals/vision/images/dog_002.jpg +0 -0
  255. mobile_agent/evals/vision/images/dog_003.jpg +0 -0
  256. mobile_agent/evals/vision/images/dog_004.jpg +0 -0
  257. mobile_agent/evals/vision/images/dog_005.jpg +0 -0
  258. mobile_agent/evals/vision/images/dog_006.jpg +0 -0
  259. mobile_agent/evals/vision/images/dog_007.jpg +0 -0
  260. mobile_agent/evals/vision/images/dog_010.jpg +0 -0
  261. mobile_agent/evals/vision/images/dog_011.jpg +0 -0
  262. mobile_agent/evals/vision/images/dog_013.jpg +0 -0
  263. mobile_agent/evals/vision/images/dog_014.jpg +0 -0
  264. mobile_agent/evals/vision/images/dog_015.jpg +0 -0
  265. mobile_agent/evals/vision/images/dog_016.jpg +0 -0
  266. mobile_agent/evals/vision/images/dog_017.jpg +0 -0
  267. mobile_agent/evals/vision/images/dog_019.jpg +0 -0
  268. mobile_agent/evals/vision/images/dog_020.jpg +0 -0
  269. mobile_agent/evals/vision/images/dog_021.jpg +0 -0
  270. mobile_agent/evals/vision/images/dog_022.jpg +0 -0
  271. mobile_agent/evals/vision/images/dog_023.jpg +0 -0
  272. mobile_agent/evals/vision/images/dog_024.jpg +0 -0
  273. mobile_agent/evals/vision/images/dog_026.jpg +0 -0
  274. mobile_agent/evals/vision/images/dog_027.jpg +0 -0
  275. mobile_agent/evals/vision/images/dog_034.jpg +0 -0
  276. mobile_agent/evals/vision/images/dog_035.jpg +0 -0
  277. mobile_agent/evals/vision/images/dog_038.jpg +0 -0
  278. mobile_agent/evals/vision/images/dog_042.jpg +0 -0
  279. mobile_agent/evals/vision/images/dog_047.jpg +0 -0
  280. mobile_agent/evals/vision/images/dog_052.jpg +0 -0
  281. mobile_agent/evals/vision/images/dog_058.jpg +0 -0
  282. mobile_agent/evals/vision/images/dog_062.jpg +0 -0
  283. mobile_agent/evals/vision/images/eyes_000.jpg +0 -0
  284. mobile_agent/evals/vision/images/eyes_010.jpg +0 -0
  285. mobile_agent/evals/vision/images/eyes_011.jpg +0 -0
  286. mobile_agent/evals/vision/images/eyes_015.jpg +0 -0
  287. mobile_agent/evals/vision/images/eyes_016.jpg +0 -0
  288. mobile_agent/evals/vision/images/eyes_017.jpg +0 -0
  289. mobile_agent/evals/vision/images/eyes_019.jpg +0 -0
  290. mobile_agent/evals/vision/images/eyes_021.jpg +0 -0
  291. mobile_agent/evals/vision/images/eyes_025.jpg +0 -0
  292. mobile_agent/evals/vision/images/eyes_026.jpg +0 -0
  293. mobile_agent/evals/vision/images/eyes_027.jpg +0 -0
  294. mobile_agent/evals/vision/images/eyes_030.jpg +0 -0
  295. mobile_agent/evals/vision/images/eyes_032.jpg +0 -0
  296. mobile_agent/evals/vision/images/eyes_033.jpg +0 -0
  297. mobile_agent/evals/vision/images/eyes_034.jpg +0 -0
  298. mobile_agent/evals/vision/images/eyes_035.jpg +0 -0
  299. mobile_agent/evals/vision/images/eyes_036.jpg +0 -0
  300. mobile_agent/evals/vision/images/eyes_037.jpg +0 -0
  301. mobile_agent/evals/vision/images/eyes_039.jpg +0 -0
  302. mobile_agent/evals/vision/images/eyes_040.jpg +0 -0
  303. mobile_agent/evals/vision/images/eyes_041.jpg +0 -0
  304. mobile_agent/evals/vision/images/eyes_042.jpg +0 -0
  305. mobile_agent/evals/vision/images/eyes_043.jpg +0 -0
  306. mobile_agent/evals/vision/images/eyes_044.jpg +0 -0
  307. mobile_agent/evals/vision/images/eyes_046.jpg +0 -0
  308. mobile_agent/evals/vision/images/eyes_047.jpg +0 -0
  309. mobile_agent/evals/vision/images/eyes_048.jpg +0 -0
  310. mobile_agent/evals/vision/images/eyes_049.jpg +0 -0
  311. mobile_agent/evals/vision/images/eyes_051.jpg +0 -0
  312. mobile_agent/evals/vision/images/eyes_053.jpg +0 -0
  313. mobile_agent/evals/vision/images/eyes_054.jpg +0 -0
  314. mobile_agent/evals/vision/images/eyes_055.jpg +0 -0
  315. mobile_agent/evals/vision/images/eyes_058.jpg +0 -0
  316. mobile_agent/evals/vision/images/eyes_059.jpg +0 -0
  317. mobile_agent/evals/vision/images/receipt_002.jpg +0 -0
  318. mobile_agent/evals/vision/images/receipt_003.jpg +0 -0
  319. mobile_agent/evals/vision/images/receipt_004.jpg +0 -0
  320. mobile_agent/evals/vision/images/receipt_007.jpg +0 -0
  321. mobile_agent/evals/vision/images/receipt_009.jpg +0 -0
  322. mobile_agent/evals/vision/images/receipt_010.jpg +0 -0
  323. mobile_agent/evals/vision/images/receipt_011.jpg +0 -0
  324. mobile_agent/evals/vision/images/receipt_012.jpg +0 -0
  325. mobile_agent/evals/vision/images/receipt_013.jpg +0 -0
  326. mobile_agent/evals/vision/images/receipt_014.jpg +0 -0
  327. mobile_agent/evals/vision/images/receipt_016.jpg +0 -0
  328. mobile_agent/evals/vision/images/receipt_017.jpg +0 -0
  329. mobile_agent/evals/vision/images/receipt_023.jpg +0 -0
  330. mobile_agent/evals/vision/images/receipt_027.jpg +0 -0
  331. mobile_agent/evals/vision/images/receipt_029.jpg +0 -0
  332. mobile_agent/evals/vision/images/receipt_032.jpg +0 -0
  333. mobile_agent/evals/vision/images/receipt_033.jpg +0 -0
  334. mobile_agent/evals/vision/images/receipt_036.jpg +0 -0
  335. mobile_agent/evals/vision/images/receipt_041.jpg +0 -0
  336. mobile_agent/evals/vision/images/receipt_043.jpg +0 -0
  337. mobile_agent/evals/vision/images/receipt_047.jpg +0 -0
  338. mobile_agent/evals/vision/images/receipt_049.jpg +0 -0
  339. mobile_agent/evals/vision/images/receipt_051.jpg +0 -0
  340. mobile_agent/evals/vision/images/receipt_053.jpg +0 -0
  341. mobile_agent/evals/vision/images/receipt_056.jpg +0 -0
  342. mobile_agent/evals/vision/images/receipt_057.jpg +0 -0
  343. mobile_agent/evals/vision/images/receipt_058.jpg +0 -0
  344. mobile_agent/evals/vision/images/receipt_059.jpg +0 -0
  345. mobile_agent/evals/vision/images/receipt_060.jpg +0 -0
  346. mobile_agent/evals/vision/images/receipt_061.jpg +0 -0
  347. mobile_agent/evals/vision/images/receipt_062.jpg +0 -0
  348. mobile_agent/evals/vision/images/receipt_063.jpg +0 -0
  349. mobile_agent/evals/vision/images/receipt_064.jpg +0 -0
  350. mobile_agent/evals/vision/images/receipt_065.jpg +0 -0
  351. mobile_agent/evals/vision/images/receipt_066.jpg +0 -0
  352. mobile_agent/evals/vision/images/receipt_067.jpg +0 -0
  353. mobile_agent/evals/vision/images/receipt_068.jpg +0 -0
  354. mobile_agent/evals/vision/images/receipt_069.jpg +0 -0
  355. mobile_agent/evals/vision/images/receipt_070.jpg +0 -0
  356. mobile_agent/evals/vision/images/receipt_071.jpg +0 -0
  357. mobile_agent/evals/vision/images/sunglasses_000.jpg +0 -0
  358. mobile_agent/evals/vision/images/sunglasses_001.jpg +0 -0
  359. mobile_agent/evals/vision/images/sunglasses_002.jpg +0 -0
  360. mobile_agent/evals/vision/images/sunglasses_004.jpg +0 -0
  361. mobile_agent/evals/vision/images/sunglasses_005.jpg +0 -0
  362. mobile_agent/evals/vision/images/sunglasses_008.jpg +0 -0
  363. mobile_agent/evals/vision/images/sunglasses_009.jpg +0 -0
  364. mobile_agent/evals/vision/images/sunglasses_010.jpg +0 -0
  365. mobile_agent/evals/vision/images/sunglasses_012.jpg +0 -0
  366. mobile_agent/evals/vision/images/sunglasses_013.jpg +0 -0
  367. mobile_agent/evals/vision/images/sunglasses_015.jpg +0 -0
  368. mobile_agent/evals/vision/images/sunglasses_016.jpg +0 -0
  369. mobile_agent/evals/vision/images/sunglasses_017.jpg +0 -0
  370. mobile_agent/evals/vision/images/sunglasses_018.jpg +0 -0
  371. mobile_agent/evals/vision/images/sunglasses_021.jpg +0 -0
  372. mobile_agent/evals/vision/images/sunglasses_022.jpg +0 -0
  373. mobile_agent/evals/vision/images/sunglasses_023.jpg +0 -0
  374. mobile_agent/evals/vision/images/sunglasses_024.jpg +0 -0
  375. mobile_agent/evals/vision/images/sunglasses_030.jpg +0 -0
  376. mobile_agent/evals/vision/images/sunglasses_031.jpg +0 -0
  377. mobile_agent/evals/vision/images/sunglasses_032.jpg +0 -0
  378. mobile_agent/evals/vision/images/sunglasses_033.jpg +0 -0
  379. mobile_agent/evals/vision/images/sunglasses_034.jpg +0 -0
  380. mobile_agent/evals/vision/images/sunglasses_036.jpg +0 -0
  381. mobile_agent/evals/vision/images/sunglasses_038.jpg +0 -0
  382. mobile_agent/evals/vision/images/sunglasses_039.jpg +0 -0
  383. mobile_agent/evals/vision/images/sunglasses_040.jpg +0 -0
  384. mobile_agent/evals/vision/images/sunglasses_041.jpg +0 -0
  385. mobile_agent/evals/vision/manifest.json +2355 -0
  386. mobile_agent/eventbus.py +110 -0
  387. mobile_agent/explain.py +34 -0
  388. mobile_agent/failure_line.py +197 -0
  389. mobile_agent/fanout.py +663 -0
  390. mobile_agent/feedback/__init__.py +2 -0
  391. mobile_agent/feedback/bundle.py +204 -0
  392. mobile_agent/feedback/outbox.py +196 -0
  393. mobile_agent/feedback/register.py +9 -0
  394. mobile_agent/feedback/routes.py +177 -0
  395. mobile_agent/fleet.py +841 -0
  396. mobile_agent/fleet_health.py +729 -0
  397. mobile_agent/fleet_phone.py +186 -0
  398. mobile_agent/frontier/__init__.py +79 -0
  399. mobile_agent/frontier/act.py +380 -0
  400. mobile_agent/frontier/actions.py +70 -0
  401. mobile_agent/frontier/agent.py +256 -0
  402. mobile_agent/frontier/approvals.py +366 -0
  403. mobile_agent/frontier/hooks.py +199 -0
  404. mobile_agent/frontier/interrupts.py +125 -0
  405. mobile_agent/frontier/observe.py +331 -0
  406. mobile_agent/frontier/phases.py +381 -0
  407. mobile_agent/frontier/pipeline.py +61 -0
  408. mobile_agent/frontier/prompt.py +384 -0
  409. mobile_agent/frontier/protocol.py +91 -0
  410. mobile_agent/frontier/safety.py +467 -0
  411. mobile_agent/frontier/saved.py +375 -0
  412. mobile_agent/frontier/screen.py +419 -0
  413. mobile_agent/frontier/skills.py +147 -0
  414. mobile_agent/frontier/stages/__init__.py +1 -0
  415. mobile_agent/frontier/stages/after.py +192 -0
  416. mobile_agent/frontier/stages/approve.py +138 -0
  417. mobile_agent/frontier/stages/controls.py +115 -0
  418. mobile_agent/frontier/stages/ends.py +102 -0
  419. mobile_agent/frontier/stages/gate.py +92 -0
  420. mobile_agent/frontier/stages/guards.py +132 -0
  421. mobile_agent/frontier/stages/points.py +155 -0
  422. mobile_agent/frontier/stages/send.py +177 -0
  423. mobile_agent/frontier/turn.py +151 -0
  424. mobile_agent/full_disk_access.py +83 -0
  425. mobile_agent/gemini.py +69 -0
  426. mobile_agent/genuine.py +120 -0
  427. mobile_agent/graph/__init__.py +4 -0
  428. mobile_agent/graph/catalog.py +789 -0
  429. mobile_agent/graph/chain.py +306 -0
  430. mobile_agent/graph/dispatch.py +98 -0
  431. mobile_agent/graph/draft.py +373 -0
  432. mobile_agent/graph/edit.py +76 -0
  433. mobile_agent/graph/estimate.py +189 -0
  434. mobile_agent/graph/expr.py +562 -0
  435. mobile_agent/graph/functions.py +271 -0
  436. mobile_agent/graph/infer.py +144 -0
  437. mobile_agent/graph/nodes.py +936 -0
  438. mobile_agent/graph/phone_steps.py +178 -0
  439. mobile_agent/graph/rerun.py +327 -0
  440. mobile_agent/graph/run.py +899 -0
  441. mobile_agent/graph/schema.py +842 -0
  442. mobile_agent/graph/state.py +161 -0
  443. mobile_agent/graph/values.py +198 -0
  444. mobile_agent/harness/__init__.py +2 -0
  445. mobile_agent/harness/checkpoints.py +468 -0
  446. mobile_agent/harness/control.py +101 -0
  447. mobile_agent/harness/prewarm.py +213 -0
  448. mobile_agent/harness/register.py +43 -0
  449. mobile_agent/harness/routes.py +114 -0
  450. mobile_agent/harness/settings.py +66 -0
  451. mobile_agent/harness/tools/__init__.py +67 -0
  452. mobile_agent/harness/tools/ask_user.py +102 -0
  453. mobile_agent/harness/tools/watch.py +120 -0
  454. mobile_agent/harness_api.py +815 -0
  455. mobile_agent/hedge.py +203 -0
  456. mobile_agent/help_topics.py +305 -0
  457. mobile_agent/hints.py +248 -0
  458. mobile_agent/history.py +69 -0
  459. mobile_agent/home.py +214 -0
  460. mobile_agent/http_pool.py +175 -0
  461. mobile_agent/image_policy.py +139 -0
  462. mobile_agent/inbox.py +148 -0
  463. mobile_agent/installed_apps.py +344 -0
  464. mobile_agent/integrations/__init__.py +1 -0
  465. mobile_agent/integrations/cli.py +472 -0
  466. mobile_agent/integrations/client_files.py +65 -0
  467. mobile_agent/integrations/clients.py +998 -0
  468. mobile_agent/integrations/doctor.py +185 -0
  469. mobile_agent/integrations/jsonc.py +383 -0
  470. mobile_agent/integrations/routes.py +135 -0
  471. mobile_agent/integrations/rules.py +112 -0
  472. mobile_agent/integrations/server_options.py +46 -0
  473. mobile_agent/integrations/skill.py +152 -0
  474. mobile_agent/integrations/skill_files.py +10 -0
  475. mobile_agent/integrations/textedit.py +309 -0
  476. mobile_agent/intents/__init__.py +17 -0
  477. mobile_agent/intents/atlas.py +216 -0
  478. mobile_agent/intents/callback.py +44 -0
  479. mobile_agent/intents/cli.py +55 -0
  480. mobile_agent/intents/harvest.py +91 -0
  481. mobile_agent/intents/plan.py +93 -0
  482. mobile_agent/ios/__init__.py +1 -0
  483. mobile_agent/ios/guide.py +16 -0
  484. mobile_agent/ios/kb.py +212 -0
  485. mobile_agent/ios/kb_data.py +1588 -0
  486. mobile_agent/ios/mcp.py +44 -0
  487. mobile_agent/ios/register.py +8 -0
  488. mobile_agent/ios/system.py +369 -0
  489. mobile_agent/journal.py +531 -0
  490. mobile_agent/keychain_acl.py +374 -0
  491. mobile_agent/keys.py +395 -0
  492. mobile_agent/latency_overlap.py +36 -0
  493. mobile_agent/latency_trace.py +170 -0
  494. mobile_agent/learned/__init__.py +15 -0
  495. mobile_agent/learned/app_path.py +160 -0
  496. mobile_agent/learned/code_read.py +38 -0
  497. mobile_agent/learned/parts.py +546 -0
  498. mobile_agent/learned/programs.py +691 -0
  499. mobile_agent/learned/register.py +171 -0
  500. mobile_agent/learned/routes.py +61 -0
  501. mobile_agent/learned/taught.py +329 -0
  502. mobile_agent/learned/teach.py +538 -0
  503. mobile_agent/learned/workflows.py +647 -0
  504. mobile_agent/learned/zero.py +41 -0
  505. mobile_agent/links.py +37 -0
  506. mobile_agent/listen.py +607 -0
  507. mobile_agent/lock_spike.py +278 -0
  508. mobile_agent/lockscreen.py +526 -0
  509. mobile_agent/login.py +354 -0
  510. mobile_agent/longform/__init__.py +15 -0
  511. mobile_agent/longform/ads.py +191 -0
  512. mobile_agent/longform/blocks.py +117 -0
  513. mobile_agent/longform/budget.py +265 -0
  514. mobile_agent/longform/context.py +285 -0
  515. mobile_agent/longform/costs.py +93 -0
  516. mobile_agent/longform/digest.py +145 -0
  517. mobile_agent/longform/extract.py +508 -0
  518. mobile_agent/longform/feed.py +505 -0
  519. mobile_agent/longform/followup.py +168 -0
  520. mobile_agent/longform/frames.py +82 -0
  521. mobile_agent/longform/identity.py +87 -0
  522. mobile_agent/longform/inbox.py +221 -0
  523. mobile_agent/longform/items.py +425 -0
  524. mobile_agent/longform/models.py +115 -0
  525. mobile_agent/longform/notebook.py +329 -0
  526. mobile_agent/longform/plan.py +614 -0
  527. mobile_agent/longform/recall.py +195 -0
  528. mobile_agent/longform/receipts.py +81 -0
  529. mobile_agent/longform/register.py +124 -0
  530. mobile_agent/longform/report.py +343 -0
  531. mobile_agent/longform/routes.py +102 -0
  532. mobile_agent/longform/session.py +644 -0
  533. mobile_agent/longform/store.py +146 -0
  534. mobile_agent/longform/synthesis.py +347 -0
  535. mobile_agent/mac_tools.py +223 -0
  536. mobile_agent/manual_control.py +143 -0
  537. mobile_agent/maps.py +149 -0
  538. mobile_agent/marks.py +92 -0
  539. mobile_agent/mcp_server/__init__.py +3 -0
  540. mobile_agent/mcp_server/__main__.py +29 -0
  541. mobile_agent/mcp_server/action_journal.py +24 -0
  542. mobile_agent/mcp_server/action_tools.py +638 -0
  543. mobile_agent/mcp_server/approvals.py +219 -0
  544. mobile_agent/mcp_server/catalog.py +92 -0
  545. mobile_agent/mcp_server/cli.py +194 -0
  546. mobile_agent/mcp_server/codes.py +147 -0
  547. mobile_agent/mcp_server/device_tools.py +306 -0
  548. mobile_agent/mcp_server/direct.py +272 -0
  549. mobile_agent/mcp_server/expo_tools.py +105 -0
  550. mobile_agent/mcp_server/phone_tools.py +510 -0
  551. mobile_agent/mcp_server/protocol.py +364 -0
  552. mobile_agent/mcp_server/registry.py +55 -0
  553. mobile_agent/mcp_server/run_tools.py +531 -0
  554. mobile_agent/mcp_server/schemas.py +425 -0
  555. mobile_agent/mcp_server/screen_tools.py +168 -0
  556. mobile_agent/mcp_server/session.py +469 -0
  557. mobile_agent/mcp_server/support.py +145 -0
  558. mobile_agent/mcp_server/tools.py +493 -0
  559. mobile_agent/memory/__init__.py +9 -0
  560. mobile_agent/memory/cli.py +207 -0
  561. mobile_agent/memory/extract.py +191 -0
  562. mobile_agent/memory/listener.py +100 -0
  563. mobile_agent/memory/model.py +144 -0
  564. mobile_agent/memory/project.py +96 -0
  565. mobile_agent/memory/provider.py +127 -0
  566. mobile_agent/memory/register.py +21 -0
  567. mobile_agent/memory/retrieval.py +172 -0
  568. mobile_agent/memory/routes.py +216 -0
  569. mobile_agent/memory/runs.py +124 -0
  570. mobile_agent/memory/store.py +806 -0
  571. mobile_agent/memory/writer.py +278 -0
  572. mobile_agent/mirroring.py +585 -0
  573. mobile_agent/mirroring_runtime.py +221 -0
  574. mobile_agent/model_clients.py +604 -0
  575. mobile_agent/narrate.py +813 -0
  576. mobile_agent/native_helpers.py +84 -0
  577. mobile_agent/netxray/__init__.py +1 -0
  578. mobile_agent/netxray/analyze.py +322 -0
  579. mobile_agent/netxray/attribution.py +62 -0
  580. mobile_agent/netxray/capture.py +88 -0
  581. mobile_agent/netxray/cli.py +142 -0
  582. mobile_agent/netxray/job.py +219 -0
  583. mobile_agent/netxray/mobster-pcap.c +560 -0
  584. mobile_agent/netxray/packets.py +410 -0
  585. mobile_agent/netxray/pcapng.py +223 -0
  586. mobile_agent/netxray/register.py +93 -0
  587. mobile_agent/netxray/report.py +214 -0
  588. mobile_agent/netxray/store.py +48 -0
  589. mobile_agent/netxray/summary.py +157 -0
  590. mobile_agent/netxray/target.py +67 -0
  591. mobile_agent/netxray/tool.py +66 -0
  592. mobile_agent/netxray/trackers.py +194 -0
  593. mobile_agent/notify_triggers/__init__.py +1 -0
  594. mobile_agent/notify_triggers/rules.py +39 -0
  595. mobile_agent/notify_triggers/sources.py +315 -0
  596. mobile_agent/notify_triggers/watch.py +135 -0
  597. mobile_agent/offers.py +86 -0
  598. mobile_agent/orchestrate.py +215 -0
  599. mobile_agent/outlets/__init__.py +1 -0
  600. mobile_agent/outlets/connect.py +249 -0
  601. mobile_agent/outlets/folder.py +180 -0
  602. mobile_agent/outlets/hooks.py +453 -0
  603. mobile_agent/outlets/inbound.py +472 -0
  604. mobile_agent/outlets/inbound_reply.py +57 -0
  605. mobile_agent/outlets/inbound_routes.py +81 -0
  606. mobile_agent/outlets/kinds.py +308 -0
  607. mobile_agent/outlets/mail.py +110 -0
  608. mobile_agent/outlets/net.py +86 -0
  609. mobile_agent/outlets/notion.py +244 -0
  610. mobile_agent/outlets/register.py +56 -0
  611. mobile_agent/outlets/routes.py +135 -0
  612. mobile_agent/outlets/service.py +580 -0
  613. mobile_agent/outlets/sheets.py +169 -0
  614. mobile_agent/outlets/slack.py +177 -0
  615. mobile_agent/outlets/store.py +194 -0
  616. mobile_agent/outlets/vault.py +80 -0
  617. mobile_agent/outlets/webhook.py +316 -0
  618. mobile_agent/output_contract.py +141 -0
  619. mobile_agent/owner_presence.py +211 -0
  620. mobile_agent/ownership.py +219 -0
  621. mobile_agent/packs/__init__.py +1 -0
  622. mobile_agent/packs/calendar.py +243 -0
  623. mobile_agent/packs/context.py +68 -0
  624. mobile_agent/packs/core.py +757 -0
  625. mobile_agent/packs/front_door.py +316 -0
  626. mobile_agent/packs/heal.py +214 -0
  627. mobile_agent/packs/health.py +122 -0
  628. mobile_agent/packs/insights.py +76 -0
  629. mobile_agent/packs/instagram.py +640 -0
  630. mobile_agent/packs/linkedin.py +106 -0
  631. mobile_agent/packs/maps.py +196 -0
  632. mobile_agent/packs/mcp.py +149 -0
  633. mobile_agent/packs/messages.py +270 -0
  634. mobile_agent/packs/notes.py +226 -0
  635. mobile_agent/packs/photos.py +166 -0
  636. mobile_agent/packs/pins.py +47 -0
  637. mobile_agent/packs/reddit.py +110 -0
  638. mobile_agent/packs/register.py +276 -0
  639. mobile_agent/packs/rows.py +108 -0
  640. mobile_agent/packs/safari.py +143 -0
  641. mobile_agent/packs/settings.py +253 -0
  642. mobile_agent/packs/social.py +300 -0
  643. mobile_agent/packs/threads.py +97 -0
  644. mobile_agent/packs/tiktok.py +455 -0
  645. mobile_agent/packs/tools.py +290 -0
  646. mobile_agent/packs/x.py +127 -0
  647. mobile_agent/packs/youtube.py +199 -0
  648. mobile_agent/parity.py +270 -0
  649. mobile_agent/paths.py +99 -0
  650. mobile_agent/perception.py +470 -0
  651. mobile_agent/permissions/__init__.py +32 -0
  652. mobile_agent/permissions/consequence.py +535 -0
  653. mobile_agent/permissions/exceptions.py +99 -0
  654. mobile_agent/permissions/gate.py +316 -0
  655. mobile_agent/permissions/outside.py +316 -0
  656. mobile_agent/permissions/policy.py +288 -0
  657. mobile_agent/permissions/project_policy.py +411 -0
  658. mobile_agent/permissions/register.py +148 -0
  659. mobile_agent/permissions/rules.py +291 -0
  660. mobile_agent/phone_io/__init__.py +146 -0
  661. mobile_agent/phone_io/cli.py +427 -0
  662. mobile_agent/phone_io/clipboard.py +78 -0
  663. mobile_agent/phone_io/controls.py +78 -0
  664. mobile_agent/phone_io/files.py +289 -0
  665. mobile_agent/phone_io/handoff.py +123 -0
  666. mobile_agent/phone_io/icloud.py +118 -0
  667. mobile_agent/phone_io/install.py +188 -0
  668. mobile_agent/phone_io/network_capture.py +188 -0
  669. mobile_agent/phone_io/network_cli.py +138 -0
  670. mobile_agent/phone_io/network_profiles.py +138 -0
  671. mobile_agent/phone_io/photos.py +512 -0
  672. mobile_agent/phone_io/recording.py +115 -0
  673. mobile_agent/phone_io/secrets.py +146 -0
  674. mobile_agent/phone_io/transfer.py +895 -0
  675. mobile_agent/phone_io/tunnel.py +129 -0
  676. mobile_agent/phone_ready.py +91 -0
  677. mobile_agent/pinning.py +158 -0
  678. mobile_agent/plan_gate.py +807 -0
  679. mobile_agent/plugins/__init__.py +3 -0
  680. mobile_agent/plugins/install.py +163 -0
  681. mobile_agent/plugins/manifest.py +242 -0
  682. mobile_agent/plugins/register.py +15 -0
  683. mobile_agent/plugins/routes.py +82 -0
  684. mobile_agent/plugins/service.py +322 -0
  685. mobile_agent/plugins/skills.py +76 -0
  686. mobile_agent/plugins/store.py +79 -0
  687. mobile_agent/pool.py +285 -0
  688. mobile_agent/power_watch.py +275 -0
  689. mobile_agent/premium_model.py +22 -0
  690. mobile_agent/project_env.py +291 -0
  691. mobile_agent/project_env_cli.py +74 -0
  692. mobile_agent/project_env_routes.py +55 -0
  693. mobile_agent/projects/__init__.py +27 -0
  694. mobile_agent/projects/ci.py +332 -0
  695. mobile_agent/projects/clone.py +339 -0
  696. mobile_agent/projects/drafts.py +158 -0
  697. mobile_agent/projects/folder.py +436 -0
  698. mobile_agent/projects/github.py +131 -0
  699. mobile_agent/projects/register.py +31 -0
  700. mobile_agent/projects/revisions.py +253 -0
  701. mobile_agent/projects/routes.py +234 -0
  702. mobile_agent/projects/runs.py +297 -0
  703. mobile_agent/projects/service.py +695 -0
  704. mobile_agent/projects/setup.py +84 -0
  705. mobile_agent/projects/store.py +379 -0
  706. mobile_agent/projects/sync.py +380 -0
  707. mobile_agent/projects/workflow_files.py +270 -0
  708. mobile_agent/replay_core/__init__.py +26 -0
  709. mobile_agent/replay_core/checks.py +594 -0
  710. mobile_agent/replay_core/engine.py +596 -0
  711. mobile_agent/replay_core/heal.py +364 -0
  712. mobile_agent/replay_core/path.py +240 -0
  713. mobile_agent/replay_core/recorder.py +206 -0
  714. mobile_agent/replay_core/store.py +171 -0
  715. mobile_agent/result_blocks.py +941 -0
  716. mobile_agent/run.py +642 -0
  717. mobile_agent/run_delivery.py +123 -0
  718. mobile_agent/run_executor.py +200 -0
  719. mobile_agent/run_export.py +284 -0
  720. mobile_agent/run_gif.py +891 -0
  721. mobile_agent/runner_hints.py +86 -0
  722. mobile_agent/runner_renewal.py +205 -0
  723. mobile_agent/runtime_create.py +549 -0
  724. mobile_agent/runtime_driver.py +458 -0
  725. mobile_agent/runtime_limits.py +319 -0
  726. mobile_agent/runtime_queue.py +394 -0
  727. mobile_agent/runtime_runs.py +383 -0
  728. mobile_agent/runtime_status.py +181 -0
  729. mobile_agent/runtime_teach.py +295 -0
  730. mobile_agent/runtime_work.py +599 -0
  731. mobile_agent/screen_text.py +101 -0
  732. mobile_agent/secret_filter.py +113 -0
  733. mobile_agent/serve.py +160 -0
  734. mobile_agent/server.py +363 -0
  735. mobile_agent/service_support.py +42 -0
  736. mobile_agent/settle/__init__.py +1 -0
  737. mobile_agent/settle/predict.py +102 -0
  738. mobile_agent/settle/replay.py +92 -0
  739. mobile_agent/settle/store.py +93 -0
  740. mobile_agent/settle/stream.py +43 -0
  741. mobile_agent/setup_cli.py +225 -0
  742. mobile_agent/setup_errors.py +87 -0
  743. mobile_agent/setup_service.py +527 -0
  744. mobile_agent/share.py +104 -0
  745. mobile_agent/signing.py +184 -0
  746. mobile_agent/sim/__init__.py +6 -0
  747. mobile_agent/sim/__main__.py +26 -0
  748. mobile_agent/sim/api.py +952 -0
  749. mobile_agent/sim/apps.py +172 -0
  750. mobile_agent/sim/biometrics.py +84 -0
  751. mobile_agent/sim/cli.py +271 -0
  752. mobile_agent/sim/doctor.py +293 -0
  753. mobile_agent/sim/governor.py +90 -0
  754. mobile_agent/sim/holders.py +88 -0
  755. mobile_agent/sim/models.py +62 -0
  756. mobile_agent/sim/registry.py +161 -0
  757. mobile_agent/sim/simctl.py +269 -0
  758. mobile_agent/sim/wda.py +618 -0
  759. mobile_agent/sim/xcode.py +74 -0
  760. mobile_agent/skills/__init__.py +12 -0
  761. mobile_agent/skills/codes.py +597 -0
  762. mobile_agent/skills/notifications.py +281 -0
  763. mobile_agent/skills/open_url.py +127 -0
  764. mobile_agent/smart_events.py +588 -0
  765. mobile_agent/smart_result.py +490 -0
  766. mobile_agent/smart_run.py +413 -0
  767. mobile_agent/state.py +662 -0
  768. mobile_agent/states.py +217 -0
  769. mobile_agent/steering.py +70 -0
  770. mobile_agent/style.py +178 -0
  771. mobile_agent/supervised.py +234 -0
  772. mobile_agent/swift/helper_bt_hid.swift +534 -0
  773. mobile_agent/swift/helper_doc_text.swift +184 -0
  774. mobile_agent/swift/helper_draft_reply.swift +170 -0
  775. mobile_agent/swift/helper_map.swift +110 -0
  776. mobile_agent/swift/helper_mirroring.swift +1099 -0
  777. mobile_agent/swift/helper_mjpeg_mp4.swift +103 -0
  778. mobile_agent/swift/helper_pdf.swift +100 -0
  779. mobile_agent/swift/helper_phone_audio.swift +993 -0
  780. mobile_agent/swift/helper_phone_screen.swift +416 -0
  781. mobile_agent/swift/helper_screen_text.swift +24 -0
  782. mobile_agent/swift/helper_transfer.swift +246 -0
  783. mobile_agent/swift/ocr.swift +22 -0
  784. mobile_agent/task_policy.py +337 -0
  785. mobile_agent/team_signing/__init__.py +34 -0
  786. mobile_agent/team_signing/apple_ca.py +37 -0
  787. mobile_agent/team_signing/bundle.py +136 -0
  788. mobile_agent/team_signing/cli.py +208 -0
  789. mobile_agent/team_signing/identity.py +248 -0
  790. mobile_agent/team_signing/ledger.py +105 -0
  791. mobile_agent/team_signing/prebuilt.py +61 -0
  792. mobile_agent/team_signing/resign.py +256 -0
  793. mobile_agent/team_signing/service.py +382 -0
  794. mobile_agent/team_signing/tooling.py +243 -0
  795. mobile_agent/team_signing/writes.py +268 -0
  796. mobile_agent/terminal_image.py +81 -0
  797. mobile_agent/testkit/__init__.py +1 -0
  798. mobile_agent/testkit/a11y_baseline.py +132 -0
  799. mobile_agent/testkit/api.py +403 -0
  800. mobile_agent/testkit/capsule.py +400 -0
  801. mobile_agent/testkit/capsule_cli.py +57 -0
  802. mobile_agent/testkit/cli.py +948 -0
  803. mobile_agent/testkit/cli_arguments.py +193 -0
  804. mobile_agent/testkit/comparison.py +288 -0
  805. mobile_agent/testkit/comparison_cli.py +41 -0
  806. mobile_agent/testkit/discover.py +257 -0
  807. mobile_agent/testkit/editor.py +243 -0
  808. mobile_agent/testkit/execute.py +515 -0
  809. mobile_agent/testkit/github_checks.py +248 -0
  810. mobile_agent/testkit/gitref.py +66 -0
  811. mobile_agent/testkit/heal_review.py +176 -0
  812. mobile_agent/testkit/health.py +480 -0
  813. mobile_agent/testkit/history.py +255 -0
  814. mobile_agent/testkit/hosted_results.py +321 -0
  815. mobile_agent/testkit/input_files.py +173 -0
  816. mobile_agent/testkit/jobs.py +285 -0
  817. mobile_agent/testkit/junit_verdict.py +33 -0
  818. mobile_agent/testkit/maestro.py +802 -0
  819. mobile_agent/testkit/mcp.py +562 -0
  820. mobile_agent/testkit/mcp_comparison.py +88 -0
  821. mobile_agent/testkit/minimize.py +471 -0
  822. mobile_agent/testkit/minimizer_cli.py +48 -0
  823. mobile_agent/testkit/notify.py +212 -0
  824. mobile_agent/testkit/phone_video.py +191 -0
  825. mobile_agent/testkit/pr.py +491 -0
  826. mobile_agent/testkit/pr_report.py +562 -0
  827. mobile_agent/testkit/prbuild.py +148 -0
  828. mobile_agent/testkit/proof_report.py +55 -0
  829. mobile_agent/testkit/provenance.py +119 -0
  830. mobile_agent/testkit/prrun.py +244 -0
  831. mobile_agent/testkit/recent.py +166 -0
  832. mobile_agent/testkit/recipes.py +146 -0
  833. mobile_agent/testkit/record.py +204 -0
  834. mobile_agent/testkit/register.py +288 -0
  835. mobile_agent/testkit/reports.py +998 -0
  836. mobile_agent/testkit/repro.py +432 -0
  837. mobile_agent/testkit/scenario.py +440 -0
  838. mobile_agent/testkit/scenario_cli.py +37 -0
  839. mobile_agent/testkit/snapshots_cli.py +60 -0
  840. mobile_agent/testkit/suite.py +670 -0
  841. mobile_agent/testkit/targets.py +497 -0
  842. mobile_agent/testkit/xctest.py +378 -0
  843. mobile_agent/threads/__init__.py +1 -0
  844. mobile_agent/threads/chat_once.py +264 -0
  845. mobile_agent/threads/cli.py +740 -0
  846. mobile_agent/threads/client.py +326 -0
  847. mobile_agent/threads/context.py +246 -0
  848. mobile_agent/threads/mcp.py +739 -0
  849. mobile_agent/threads/recent.py +34 -0
  850. mobile_agent/threads/register.py +54 -0
  851. mobile_agent/threads/routes.py +188 -0
  852. mobile_agent/threads/service.py +975 -0
  853. mobile_agent/threads/store.py +361 -0
  854. mobile_agent/threads/summary.py +117 -0
  855. mobile_agent/threads/term.py +101 -0
  856. mobile_agent/threads/workflow_cli.py +104 -0
  857. mobile_agent/tls.py +36 -0
  858. mobile_agent/traces.py +271 -0
  859. mobile_agent/tracks.py +235 -0
  860. mobile_agent/transport.py +271 -0
  861. mobile_agent/triggers/__init__.py +1 -0
  862. mobile_agent/triggers/actions.py +204 -0
  863. mobile_agent/triggers/model.py +146 -0
  864. mobile_agent/triggers/register.py +29 -0
  865. mobile_agent/triggers/routes.py +101 -0
  866. mobile_agent/triggers/service.py +387 -0
  867. mobile_agent/triggers/store.py +142 -0
  868. mobile_agent/tui/__init__.py +89 -0
  869. mobile_agent/tui/app.py +582 -0
  870. mobile_agent/tui/chrome.py +321 -0
  871. mobile_agent/tui/commands.py +375 -0
  872. mobile_agent/tui/demo_phone.py +369 -0
  873. mobile_agent/tui/images.py +29 -0
  874. mobile_agent/tui/keys.py +64 -0
  875. mobile_agent/tui/prompt.py +195 -0
  876. mobile_agent/tui/render.py +395 -0
  877. mobile_agent/tui/screens.py +180 -0
  878. mobile_agent/tui/session.py +308 -0
  879. mobile_agent/tui/tasks.py +287 -0
  880. mobile_agent/tui/theme.py +118 -0
  881. mobile_agent/tui/widgets.py +272 -0
  882. mobile_agent/update_check.py +213 -0
  883. mobile_agent/usage.py +184 -0
  884. mobile_agent/verify/__init__.py +0 -0
  885. mobile_agent/verify/__main__.py +41 -0
  886. mobile_agent/verify/a11y.py +189 -0
  887. mobile_agent/verify/actions.py +290 -0
  888. mobile_agent/verify/assertions.py +570 -0
  889. mobile_agent/verify/audit.py +312 -0
  890. mobile_agent/verify/business.py +221 -0
  891. mobile_agent/verify/business_run.py +131 -0
  892. mobile_agent/verify/business_state.py +168 -0
  893. mobile_agent/verify/check_schema.py +398 -0
  894. mobile_agent/verify/checks.py +614 -0
  895. mobile_agent/verify/cli.py +423 -0
  896. mobile_agent/verify/conditions.py +483 -0
  897. mobile_agent/verify/crashes.py +321 -0
  898. mobile_agent/verify/device_audit.py +246 -0
  899. mobile_agent/verify/dialogs.py +287 -0
  900. mobile_agent/verify/evidence.py +705 -0
  901. mobile_agent/verify/fixtures.py +305 -0
  902. mobile_agent/verify/flow.py +213 -0
  903. mobile_agent/verify/l10n.py +141 -0
  904. mobile_agent/verify/netcerts.py +67 -0
  905. mobile_agent/verify/netproxy.py +356 -0
  906. mobile_agent/verify/netrun.py +81 -0
  907. mobile_agent/verify/netshim.m +28 -0
  908. mobile_agent/verify/netshim.py +48 -0
  909. mobile_agent/verify/netstubs.py +132 -0
  910. mobile_agent/verify/overlay.py +174 -0
  911. mobile_agent/verify/perf.py +239 -0
  912. mobile_agent/verify/proof.py +192 -0
  913. mobile_agent/verify/replay_admission.py +48 -0
  914. mobile_agent/verify/report.py +952 -0
  915. mobile_agent/verify/run_cleanup.py +67 -0
  916. mobile_agent/verify/run_links.py +48 -0
  917. mobile_agent/verify/run_perf.py +44 -0
  918. mobile_agent/verify/run_secrets.py +39 -0
  919. mobile_agent/verify/runner.py +976 -0
  920. mobile_agent/verify/runs.py +57 -0
  921. mobile_agent/verify/screen_coverage.py +181 -0
  922. mobile_agent/verify/smart.py +106 -0
  923. mobile_agent/verify/snapshot_run.py +114 -0
  924. mobile_agent/verify/snapshots.py +306 -0
  925. mobile_agent/verify/sound.py +335 -0
  926. mobile_agent/verify/source_observation.py +130 -0
  927. mobile_agent/verify/system_surfaces/__init__.py +7 -0
  928. mobile_agent/verify/system_surfaces/play.py +106 -0
  929. mobile_agent/verify/system_surfaces/spec.py +139 -0
  930. mobile_agent/verify/system_surfaces/stage.py +138 -0
  931. mobile_agent/verify/system_surfaces/surfaces.py +121 -0
  932. mobile_agent/verify/tree.py +223 -0
  933. mobile_agent/verify/verdict.py +377 -0
  934. mobile_agent/verify/wire.py +392 -0
  935. mobile_agent/verify/wirestore.py +176 -0
  936. mobile_agent/waiting/__init__.py +1 -0
  937. mobile_agent/waiting/contacts.py +73 -0
  938. mobile_agent/waiting/drafts.py +136 -0
  939. mobile_agent/waiting/job.py +145 -0
  940. mobile_agent/waiting/messages.py +174 -0
  941. mobile_agent/waiting/rank.py +115 -0
  942. mobile_agent/waiting/register.py +26 -0
  943. mobile_agent/watch.py +502 -0
  944. mobile_agent/wda/__init__.py +2 -0
  945. mobile_agent/wda/frame_clock.py +646 -0
  946. mobile_agent/wda/frame_source.py +325 -0
  947. mobile_agent/wda/frame_store.py +115 -0
  948. mobile_agent/wda/gate.py +163 -0
  949. mobile_agent/wda/gestures.py +291 -0
  950. mobile_agent/wda/guards.py +94 -0
  951. mobile_agent/wda/identity.py +55 -0
  952. mobile_agent/wda/observe.py +884 -0
  953. mobile_agent/wda/patches.py +856 -0
  954. mobile_agent/wda/point_gestures.py +150 -0
  955. mobile_agent/wda/source.py +32 -0
  956. mobile_agent/wda/system_dialogs.py +571 -0
  957. mobile_agent/wda/text.py +694 -0
  958. mobile_agent/wda/timeouts.py +77 -0
  959. mobile_agent/wda/video.py +505 -0
  960. mobile_agent/wda/watchdog.py +243 -0
  961. mobile_agent/wireless/__init__.py +15 -0
  962. mobile_agent/wireless/api.py +354 -0
  963. mobile_agent/wireless/cli.py +287 -0
  964. mobile_agent/wireless/devicectl.py +229 -0
  965. mobile_agent/wireless/exposure.py +33 -0
  966. mobile_agent/wireless/mobster-wifi-pair.c +122 -0
  967. mobile_agent/wireless/monitor.py +332 -0
  968. mobile_agent/wireless/network.py +334 -0
  969. mobile_agent/wireless/onboarding.py +293 -0
  970. mobile_agent/wireless/pair.py +124 -0
  971. mobile_agent/wireless/probe.py +322 -0
  972. mobile_agent/wireless/register.py +8 -0
  973. mobile_agent/wireless/relay.py +179 -0
  974. mobile_agent/wireless/result.py +87 -0
  975. mobile_agent/wireless/store.py +85 -0
  976. mobile_agent/wireless/switch.py +77 -0
  977. mobile_agent/wireless/transport.py +118 -0
  978. mobile_agent/wireless/words.py +81 -0
  979. mobile_agent/wireless/xctestrun.py +83 -0
  980. mobile_agent/workflow_tools.py +59 -0
  981. mobile_agent/workflows/__init__.py +2 -0
  982. mobile_agent/workflows/brief.py +201 -0
  983. mobile_agent/workflows/cron.py +110 -0
  984. mobile_agent/workflows/health.py +257 -0
  985. mobile_agent/workflows/history.py +126 -0
  986. mobile_agent/workflows/records.py +442 -0
  987. mobile_agent/workflows/runs.py +1000 -0
  988. mobile_agent/workflows/scheduler.py +134 -0
  989. mobile_agent/workflows/service.py +973 -0
  990. mobile_agent/workflows/starters.py +285 -0
  991. mobile_agent/workflows/triggers.py +248 -0
  992. mobile_agent/xray/__init__.py +1 -0
  993. mobile_agent/xray/app_cli.py +116 -0
  994. mobile_agent/xray/cli.py +21 -0
  995. mobile_agent/xray/crawl.py +754 -0
  996. mobile_agent/xray/diff.py +171 -0
  997. mobile_agent/xray/diff_cli.py +43 -0
  998. mobile_agent/xray/job.py +184 -0
  999. mobile_agent/xray/paywall.py +188 -0
  1000. mobile_agent/xray/policy.py +305 -0
  1001. mobile_agent/xray/register.py +43 -0
  1002. mobile_agent/xray/report.py +283 -0
  1003. mobile_agent/xray/screens.py +117 -0
  1004. mobster_cli-0.4.3.dist-info/METADATA +93 -0
  1005. mobster_cli-0.4.3.dist-info/RECORD +1009 -0
  1006. mobster_cli-0.4.3.dist-info/WHEEL +5 -0
  1007. mobster_cli-0.4.3.dist-info/entry_points.txt +3 -0
  1008. mobster_cli-0.4.3.dist-info/licenses/LICENSE +21 -0
  1009. mobster_cli-0.4.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,591 @@
1
+ """The connectors Settings offers with one click: each vendor's own remote MCP server, at the URL the vendor publishes
2
+ (checked against each vendor's documentation on 13 Oct 2026, the rows from Sentry on 15 Oct 2026; ``docs`` is where)."""
3
+
4
+ from . import oauth, shared
5
+
6
+ PRESETS = (
7
+ {"key": "notion", "examples": ['Read the menu on my phone and add it to my Notion page Dinner ideas',
8
+ "Find my Notion page Trip packing list and check off what's in my Photos"],
9
+ "tagline": "Pages and databases, searched and updated", "name": "Notion", "publisher": "Notion",
10
+ "url": "https://mcp.notion.com/mcp", "auth": "oauth", "access": "Reads and writes",
11
+ "description": "Search and read your pages and databases, and add or update pages.",
12
+ "docs": "https://developers.notion.com/guides/mcp/get-started-with-mcp", "audience": "everyday"},
13
+ {"key": "linear", "examples": ['Open a Linear issue for the crash I just hit in the app on my phone',
14
+ 'Read my Linear issues due this week and set reminders for them'],
15
+ "tagline": "Issues, projects and comments",
16
+ "name": "Linear", "publisher": "Linear", "url": "https://mcp.linear.app/mcp", "auth": "oauth",
17
+ "access": "Reads and writes",
18
+ "description": "Find, create and update issues, projects and comments.",
19
+ "docs": "https://linear.app/docs/mcp", "audience": "builder"},
20
+ {"key": "github", "examples": ['Open a GitHub issue with the steps that failed on my iPhone',
21
+ 'Check the latest GitHub release notes and update the app on my phone'],
22
+ "tagline": "Repositories, issues and pull requests",
23
+ "name": "GitHub", "publisher": "GitHub", "url": "https://api.githubcopilot.com/mcp/", "auth": "mobster_app",
24
+ "access": "Reads and writes", "fallback": "token", "token_label": "GitHub personal access token",
25
+ "description": "Read repositories, issues and pull requests, and open or comment on them.",
26
+ "docs": "https://github.com/github/github-mcp-server", "audience": "builder"},
27
+ {"key": "slack", "examples": ['Post the screenshot of my order status to Slack #team',
28
+ 'Read my Slack mentions and text me the urgent ones'],
29
+ "tagline": "Messages, channels and threads", "name": "Slack",
30
+ "publisher": "Slack", "url": "https://mcp.slack.com/mcp", "gated": True, "auth": "mobster_app",
31
+ "access": "Reads and writes", "fallback": "oauth_client",
32
+ "description": "Search messages and channels, read threads, and send messages.",
33
+ "docs": "https://docs.slack.dev/ai/mcp-server/", "audience": "everyday"},
34
+ {"key": "google-drive", "examples": ['Find the boarding pass in my Google Drive and add it to Wallet',
35
+ 'Read the packing list in my Drive and add the items to Reminders'],
36
+ "tagline": "Search and read the files you pick", "name": "Google Drive", "publisher": "Google",
37
+ "url": "https://drivemcp.googleapis.com/mcp/v1",
38
+ "gated": True, "auth": "mobster_app", "fallback": "oauth_client", "access": "Reads",
39
+ # drive.file alone, a non-sensitive scope: Google's MCP server takes it (its tools and its protected-resource
40
+ # metadata list it, 17 Oct 2026), and Mobster opens only the files you pick and the files it made.
41
+ "scopes": "https://www.googleapis.com/auth/drive.file", "picker": True,
42
+ "description": "Search and read the Google Drive files you pick, and the files Mobster made.",
43
+ "docs": "https://developers.google.com/workspace/drive/api/guides/configure-mcp-server", "audience": "everyday"},
44
+ {"key": "sentry", "name": "Sentry", "publisher": "Sentry", "url": "https://mcp.sentry.dev/mcp", "auth": "oauth",
45
+ "access": "Reads and writes", "audience": "builder", "tagline": "Issues, errors and traces",
46
+ "description": "Search issues and errors, read their events and stack traces, and update issues.",
47
+ "examples": ["Find the newest crash in Sentry for my app and repeat its steps on my iPhone",
48
+ "Tap through checkout on my iPhone, then check Sentry for errors from that session"],
49
+ "docs": "https://mcp.sentry.dev/"},
50
+ {"key": "posthog", "name": "PostHog", "publisher": "PostHog", "url": "https://mcp.posthog.com/mcp",
51
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
52
+ "tagline": "Events, insights, flags and errors",
53
+ "description": "Query events and insights, read errors and stack traces, and change "
54
+ "feature flags and experiments.",
55
+ "examples": ["Tap through onboarding on my iPhone, then check in PostHog that each step's event arrived",
56
+ "Turn on the PostHog flag new-paywall for my test user and check the paywall on my iPhone"],
57
+ "docs": "https://posthog.com/docs/model-context-protocol"},
58
+ {"key": "supabase", "name": "Supabase", "publisher": "Supabase", "url": "https://mcp.supabase.com/mcp",
59
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
60
+ "tagline": "Postgres, projects and edge functions",
61
+ "description": "Run SQL and migrations, manage projects and branches, deploy edge functions, and read logs and "
62
+ "advisors.",
63
+ "examples": ["Sign up in my app on my iPhone, then check in Supabase that the new user row exists",
64
+ "Read the newest error in my Supabase logs and repeat the failing step on my iPhone"],
65
+ "docs": "https://supabase.com/docs/guides/getting-started/mcp"},
66
+ {"key": "stripe", "name": "Stripe", "publisher": "Stripe", "url": "https://mcp.stripe.com",
67
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
68
+ "tagline": "Payments, customers and subscriptions",
69
+ "description": "Search and read Stripe data, create and update customers, products, prices and invoices, and run "
70
+ "refunds after you confirm.",
71
+ "examples": ["Buy the subscription in my app on my iPhone with a Stripe test card, then check the subscription in "
72
+ "Stripe",
73
+ "Create a Stripe coupon, apply it at checkout in my app on my iPhone and check the discounted total"],
74
+ "docs": "https://docs.stripe.com/mcp"},
75
+ {"key": "mixpanel", "name": "Mixpanel", "publisher": "Mixpanel", "url": "https://mcp.mixpanel.com/mcp",
76
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
77
+ "tagline": "Funnels, retention and session replays",
78
+ "description": "Run insights, funnels, flows and retention queries, read session replays, and edit boards, "
79
+ "Lexicon and feature flags.",
80
+ "examples": ["Tap through signup on my iPhone, then check in Mixpanel that the Sign Up event fired with the right "
81
+ "properties",
82
+ "Pull the last three Mixpanel sessions for the user who reported a bug and repeat their steps on my "
83
+ "iPhone"],
84
+ "docs": "https://docs.mixpanel.com/docs/mcp"},
85
+ {"key": "vercel", "name": "Vercel", "publisher": "Vercel", "url": "https://mcp.vercel.com",
86
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
87
+ "tagline": "Projects, deployments and logs",
88
+ "description": "Search Vercel docs, manage projects and deployments, read deployment logs, and query Web "
89
+ "Analytics.",
90
+ "examples": ["Check in Vercel that the latest deployment of my API is ready, then run through login on my iPhone",
91
+ "Read the failed deployment logs in Vercel, then repeat the failing screen on my iPhone"],
92
+ "docs": "https://vercel.com/docs/agent-resources/vercel-mcp"},
93
+ {"key": "runway", "name": "Runway", "publisher": "Runway", "url": "https://mcp.runway.team",
94
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
95
+ "tagline": "Mobile releases, rollouts and builds",
96
+ "description": "Check apps, releases and rollouts, update release status, create hotfixes, and manage Build "
97
+ "Distro builds and buckets.",
98
+ "examples": ["Check the Runway rollout for my latest iOS release, then open the App Store build on my iPhone and "
99
+ "look for the new version",
100
+ "Mark regression testing done in Runway for this release after I tap through the TestFlight build on "
101
+ "my iPhone"],
102
+ "docs": "https://docs.runway.team/api/mcp-server"},
103
+ {"key": "amplitude", "name": "Amplitude", "publisher": "Amplitude", "url": "https://mcp.amplitude.com/mcp",
104
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
105
+ "tagline": "Charts, experiments and tracking plan",
106
+ "description": "Query analytics, funnels and retention, read session replays, and create charts, dashboards, "
107
+ "experiments and feature flags.",
108
+ "examples": ["Tap through checkout on my iPhone, then check in Amplitude that the "
109
+ "Checkout Completed event arrived",
110
+ "Find the Amplitude funnel step where most users drop off and walk through that screen on my iPhone"],
111
+ "docs": "https://amplitude.com/docs/amplitude-ai/amplitude-mcp"},
112
+ {"key": "clerk", "name": "Clerk", "publisher": "Clerk", "url": "https://mcp.clerk.com/mcp",
113
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
114
+ "tagline": "Users, applications and auth config",
115
+ "description": "List and create users, read and change application and instance configuration, check domains, and "
116
+ "fetch SDK snippets.",
117
+ "examples": ["Create a test user in Clerk, then sign in as that user in my app on my iPhone",
118
+ "List the five newest sign-ups in Clerk and check each opens the welcome screen on my iPhone"],
119
+ "docs": "https://clerk.com/docs/guides/ai/mcp/clerk-mcp-server"},
120
+ {"key": "statsig", "name": "Statsig", "publisher": "Statsig", "url": "https://api.statsig.com/v3/mcp",
121
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
122
+ "tagline": "Gates, experiments and dynamic configs",
123
+ "description": "List and inspect feature gates, experiments, dynamic configs and metrics, and create or update "
124
+ "them.",
125
+ "examples": ["Turn on the Statsig gate new_onboarding for my test user and check the onboarding screens on my "
126
+ "iPhone",
127
+ "Tap through checkout on my iPhone, then check in Statsig that the experiment exposure was logged"],
128
+ "docs": "https://docs.statsig.com/integrations/mcp/overview"},
129
+ {"key": "launchdarkly", "name": "LaunchDarkly", "publisher": "LaunchDarkly",
130
+ "url": "https://mcp.launchdarkly.com/mcp/launchdarkly",
131
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
132
+ "tagline": "Feature flags, AI configs and errors",
133
+ "description": "Create and update feature flags and targeting, manage AI configs, and query error groups, logs "
134
+ "and traces.",
135
+ "examples": ["Turn the LaunchDarkly flag new-checkout on for my test context and check checkout on my iPhone",
136
+ "Turn the LaunchDarkly flag off, then confirm on my iPhone that the old screen comes back"],
137
+ "docs": "https://launchdarkly.com/docs/home/getting-started/mcp-hosted"},
138
+ {"key": "lokalise", "name": "Lokalise", "publisher": "Lokalise",
139
+ "url": "https://mcp.lokalise.com/mcp/software-development",
140
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
141
+ "tagline": "Localization keys, tasks and screenshots",
142
+ "description": "List and update translation keys, check translation progress, create tasks, and attach "
143
+ "screenshots.",
144
+ "examples": ["List the untranslated German keys in Lokalise, then open the German screen on my iPhone and check "
145
+ "the text",
146
+ "Take a screenshot of my iPhone's checkout screen and attach it to the matching Lokalise key"],
147
+ "docs": "https://docs.lokalise.com/en/articles/13547066-setting-up-and-using-the-lokalise-mcp-server"},
148
+ {"key": "resend", "name": "Resend", "publisher": "Resend", "url": "https://mcp.resend.com/mcp",
149
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
150
+ "tagline": "Email sending, domains and contacts",
151
+ "description": "Send and read emails, manage domains, contacts, templates and broadcasts, and trigger automations "
152
+ "and webhooks.",
153
+ "examples": ["Send a Resend test email to my address, then open the message in Mail on my iPhone and check the "
154
+ "layout",
155
+ "Trigger my app's password-reset email through Resend, then tap the link in Mail on my iPhone"],
156
+ "docs": "https://resend.com/docs/mcp-server"},
157
+ {"key": "mobbin", "name": "Mobbin", "publisher": "Mobbin", "url": "https://api.mobbin.com/mcp",
158
+ "auth": "oauth", "gated": True, "access": "Reads", "audience": "builder", "tagline": "Real app screens and flows",
159
+ "description": "Search Mobbin's library of real app screens, multi-step flows and website sections.",
160
+ "examples": ["Search Mobbin for onboarding flows from banking apps, then compare them with my app's onboarding on "
161
+ "my iPhone",
162
+ "Find Mobbin paywall screens and check on my iPhone which of them my app is missing"],
163
+ "docs": "https://docs.mobbin.com/mcp/features"},
164
+ {"key": "datadog", "name": "Datadog", "publisher": "Datadog",
165
+ "url": "https://mcp.datadoghq.com/api/unstable/mcp-server/mcp",
166
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
167
+ "tagline": "Logs, monitors, RUM and errors",
168
+ "description": "Search logs, metrics, monitors, RUM events and error tracking issues, and create or update "
169
+ "monitors, dashboards, notebooks and cases.",
170
+ "examples": ["Find the newest iOS crash in Datadog Error Tracking for my app and repeat its steps on my iPhone",
171
+ "Tap through checkout on my iPhone, then check Datadog RUM for errors and slow views from that "
172
+ "session"],
173
+ "docs": "https://docs.datadoghq.com/mcp_server/setup/"},
174
+ {"key": "newrelic", "name": "New Relic", "publisher": "New Relic", "url": "https://mcp.newrelic.com/mcp/",
175
+ "auth": "oauth", "gated": True, "access": "Reads", "audience": "builder",
176
+ "tagline": "NRQL, alerts, errors and traces",
177
+ "description": "Run NRQL queries, search errors and incidents, read alert conditions and entities, and analyze "
178
+ "deployments and traces.",
179
+ "examples": ["Check New Relic for errors and slow transactions from my last run, then repeat the failing screen "
180
+ "on my iPhone",
181
+ "Tap through login on my iPhone, then check New Relic for errors on my app's backend in the last 10 "
182
+ "minutes"],
183
+ "docs": "https://docs.newrelic.com/docs/agentic-ai/mcp/overview/"},
184
+ {"key": "customerio", "name": "Customer.io", "publisher": "Customer.io", "url": "https://mcp.customer.io/mcp",
185
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
186
+ "tagline": "Automations, segments and sends",
187
+ "description": "Read workspace data and delivery metrics, and create automations, segments, one-time sends and "
188
+ "templates as drafts.",
189
+ "examples": ["Draft a welcome email in Customer.io, then check on my iPhone how it renders after I send it to "
190
+ "myself",
191
+ "Set up a Customer.io push for my app, then check on my iPhone that the test push arrives"],
192
+ "docs": "https://docs.customer.io/ai/mcp-server/"},
193
+ {"key": "crowdin", "name": "Crowdin", "publisher": "Crowdin", "url": "https://mcp.crowdin.com/v2/mcp",
194
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
195
+ "tagline": "Strings, translations and tasks",
196
+ "description": "Search and edit source strings and translations, check translation progress, create tasks, and "
197
+ "manage glossaries.",
198
+ "examples": ["Check Crowdin for untranslated Spanish strings in my app, then open the Spanish screen on my iPhone "
199
+ "and look for English text",
200
+ "Add a screenshot of my iPhone's settings screen to Crowdin and tag the strings on it"],
201
+ "docs": "https://support.crowdin.com/developer/crowdin-mcp-server/"},
202
+ {"key": "paddle", "name": "Paddle", "publisher": "Paddle", "url": "https://mcp.paddle.com/mcp",
203
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
204
+ "tagline": "Pricing, billing and subscriptions",
205
+ "description": "Search the Paddle API and run calls that read transactions, subscriptions and reports and change "
206
+ "pricing and billing.",
207
+ "examples": ["Buy the premium plan in my app on my iPhone, then check the transaction and subscription in Paddle",
208
+ "Cancel the test subscription in Paddle and check my app on my iPhone shows the free plan"],
209
+ "docs": "https://developer.paddle.com/sdks/ai/paddle-mcp"},
210
+ {"key": "neon", "name": "Neon", "publisher": "Neon", "url": "https://mcp.neon.tech/mcp",
211
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
212
+ "tagline": "Postgres projects, branches and queries",
213
+ "description": "Manage projects, branches and computes, run SQL and migrations, compare schemas, and read "
214
+ "database diagnostics.",
215
+ "examples": ["Run my app's migration on a Neon branch, then tap through the new screen on my iPhone",
216
+ "After I add a note in my app on my iPhone, check in Neon that the row reached the notes table"],
217
+ "docs": "https://neon.com/docs/ai/neon-mcp-server"},
218
+ {"key": "postman", "name": "Postman", "publisher": "Postman", "url": "https://mcp.postman.com/mcp",
219
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
220
+ "tagline": "Collections, workspaces and API specs",
221
+ "description": "Manage workspaces, collections, environments and API specs, run collections, and generate client "
222
+ "code.",
223
+ "examples": ["Run my Postman collection against my staging API, then check the same data in my app on my iPhone",
224
+ "Read the latest API change in my Postman workspace, then check the affected screen in my app on my "
225
+ "iPhone"],
226
+ "docs": "https://learning.postman.com/docs/developer/postman-api/postman-mcp-server/overview/"},
227
+ {"key": "contentful", "name": "Contentful", "publisher": "Contentful", "url": "https://mcp.contentful.com/mcp",
228
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
229
+ "tagline": "Spaces, entries and assets",
230
+ "description": "Search spaces, read and edit entries and content types, and manage assets.",
231
+ "examples": ["Read the newest entry in Contentful and check that it shows on the right screen on my iPhone",
232
+ "Change the hero title entry in Contentful, then pull to refresh my app on my iPhone and check it"],
233
+ "docs": "https://www.contentful.com/developers/docs/mcp"},
234
+ {"key": "sanity", "name": "Sanity", "publisher": "Sanity", "url": "https://mcp.sanity.io",
235
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
236
+ "tagline": "Content, schemas and datasets",
237
+ "description": "Query documents with GROQ, create, patch and publish content, and manage schemas, datasets and "
238
+ "releases.",
239
+ "examples": ["Publish the draft banner document in Sanity, then check the banner on my iPhone",
240
+ "Read the newest article in Sanity and check it renders in my app on my iPhone"],
241
+ "docs": "https://www.sanity.io/docs/ai/mcp-server"},
242
+ {"key": "shortcut", "name": "Shortcut", "publisher": "Shortcut", "url": "https://mcp.shortcut.com/mcp",
243
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
244
+ "tagline": "Stories, epics and iterations",
245
+ "description": "Find, create and update stories, epics, iterations and docs, and read teams, members and "
246
+ "workflows.",
247
+ "examples": ["Take the newest bug story in Shortcut, reproduce it on my iPhone, and add a comment with what I saw",
248
+ "Open the story for onboarding in Shortcut and walk through that flow on my iPhone"],
249
+ "docs": "https://www.shortcut.com/help/integrations/mcp-server/"},
250
+ {"key": "netlify", "name": "Netlify", "publisher": "Netlify", "url": "https://netlify-mcp.netlify.app/mcp",
251
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
252
+ "tagline": "Sites, deploys and environment variables",
253
+ "description": "Manage Netlify projects, deploys, environment variables, secrets and form submissions.",
254
+ "examples": ["Deploy my branch to Netlify, then open the preview URL on my iPhone and check the sign-up page",
255
+ "Read the latest form submissions in Netlify and try the same form on my iPhone"],
256
+ "docs": "https://docs.netlify.com/build/build-with-ai/netlify-mcp-server/"},
257
+ {"key": "cloudflare", "name": "Cloudflare", "publisher": "Cloudflare", "url": "https://mcp.cloudflare.com/mcp",
258
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
259
+ "tagline": "Workers, R2, DNS and docs",
260
+ "description": "Search the Cloudflare API, call its endpoints for Workers, R2 and DNS, and search Cloudflare's "
261
+ "developer docs.",
262
+ "examples": ["Check in Cloudflare which Worker handles my app's API, then trigger a request from my iPhone and "
263
+ "look for errors",
264
+ "Tap through checkout on my iPhone, then look in Cloudflare for failed requests to my Worker"],
265
+ "docs": "https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/"},
266
+ {"key": "buildkite", "name": "Buildkite", "publisher": "Buildkite", "url": "https://mcp.buildkite.com/mcp",
267
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
268
+ "tagline": "Builds, jobs and test failures",
269
+ "description": "Read builds, jobs, logs and failed tests, wait for builds to finish, and retry jobs or start "
270
+ "builds.",
271
+ "examples": ["Start a Buildkite build for my branch, then install the finished build on my iPhone and open it",
272
+ "Find the failing test in the latest Buildkite build and repeat that screen on my iPhone"],
273
+ "docs": "https://buildkite.com/docs/apis/mcp-server"},
274
+ {"key": "honeycomb", "name": "Honeycomb", "publisher": "Honeycomb", "url": "https://mcp.honeycomb.io/mcp",
275
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
276
+ "tagline": "Queries, traces, boards and SLOs",
277
+ "description": "Run queries, read traces and spans, check SLOs and triggers, and create "
278
+ "boards, triggers and SLOs.",
279
+ "examples": ["Tap through checkout on my iPhone, then find that session's trace in Honeycomb and tell me the "
280
+ "slowest span",
281
+ "Read the failing Honeycomb trigger, then repeat the matching flow on my iPhone"],
282
+ "docs": "https://docs.honeycomb.io/integrations/mcp/"},
283
+ {"key": "grafana", "name": "Grafana", "publisher": "Grafana Labs", "url": "https://mcp.grafana.com/mcp",
284
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
285
+ "tagline": "Dashboards, metrics, logs and alerts",
286
+ "description": "Search dashboards, query Prometheus, Loki and Tempo, read alerts and incidents, and update "
287
+ "dashboards or create incidents.",
288
+ "examples": ["Check the Grafana dashboard for my app's API latency, then tap through the slow screen on my iPhone",
289
+ "Tap through checkout on my iPhone, then query Loki in Grafana for errors from that session"],
290
+ "docs": "https://grafana.com/docs/grafana-cloud/ai-tools/mcp-servers/cloud-mcp/"},
291
+ {"key": "axiom", "name": "Axiom", "publisher": "Axiom", "url": "https://mcp.axiom.co/mcp",
292
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "builder",
293
+ "tagline": "Logs, datasets, dashboards and monitors",
294
+ "description": "Query datasets and metrics, explore logs and traces, and manage dashboards, monitors and "
295
+ "notifiers.",
296
+ "examples": ["Tap through signup on my iPhone, then query Axiom for errors logged from that session",
297
+ "Find the latest error in my Axiom logs and repeat its steps on my iPhone"],
298
+ "docs": "https://axiom.co/docs/console/intelligence/mcp-server"},
299
+ {"key": "expo", "name": "Expo", "publisher": "Expo", "url": "https://mcp.expo.dev/mcp", "auth": "oauth",
300
+ "access": "Reads and writes", "audience": "builder", "tagline": "EAS builds, workflows and store feedback",
301
+ "description": "List and start EAS builds and workflows, read their logs, and read TestFlight crashes and App "
302
+ "Store reviews.",
303
+ "examples": ["Read the newest TestFlight crashes in Expo and repeat each one on my iPhone",
304
+ "Check that my latest Expo build finished, then test sign-up in the app on my iPhone"],
305
+ "docs": "https://docs.expo.dev/mcp/"},
306
+ {"key": "gitlab", "name": "GitLab", "publisher": "GitLab", "url": "https://gitlab.com/api/v4/mcp", "gated": True,
307
+ "auth": "mobster_app",
308
+ "fallback": "oauth_client", "scopes": "mcp", "instance_path": "/api/v4/mcp", "access": "Reads and writes",
309
+ "audience": "builder", "tagline": "Issues, merge requests and pipelines",
310
+ "description": "Find and create issues and merge requests, comment on them, and check pipelines.",
311
+ "examples": ["Open a GitLab issue with the steps that failed on my iPhone",
312
+ "Test the merge request's change on my iPhone and comment the result in GitLab"],
313
+ "docs": "https://docs.gitlab.com/user/model_context_protocol/mcp_server/"},
314
+ {"key": "jira", "name": "Jira", "publisher": "Atlassian", "url": "https://mcp.atlassian.com/v2/mcp",
315
+ "auth": "oauth",
316
+ "access": "Reads and writes", "audience": "builder", "tagline": "Jira issues and Confluence pages",
317
+ "description": "Search, create and update Jira issues and Confluence pages, and comment on them.",
318
+ "examples": ["File a Jira bug with the steps that broke on my iPhone",
319
+ "Read the Jira ticket for the login screen and check each step on my iPhone"],
320
+ "docs": "https://support.atlassian.com/atlassian-ai-gateway/docs/get-started-with-the-atlassian-remote-mcp-server/"},
321
+ {"key": "airtable", "name": "Airtable", "publisher": "Airtable", "url": "https://mcp.airtable.com/mcp",
322
+ "auth": "oauth", "access": "Reads and writes", "audience": "everyday", "tagline": "Bases, tables and records",
323
+ "description": "Search your bases, read their records, and create or update records.",
324
+ "examples": ["Read today's posts in my Airtable content calendar and post each one from my iPhone",
325
+ "After you post from my iPhone, set each post's Status to Posted in Airtable"],
326
+ "docs": "https://support.airtable.com/articles/9897799762-using-the-airtable-mcp-server"},
327
+ {"key": "metricool", "name": "Metricool", "publisher": "Metricool", "url": "https://ai.metricool.com/mcp",
328
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
329
+ "tagline": "Social posts, analytics and brands",
330
+ "description": "List your brands, read social and ad analytics, and schedule or edit posts.",
331
+ "examples": ["Read this week's scheduled posts in Metricool and check each one in its app on my iPhone",
332
+ "After you post from my iPhone, schedule the same caption in Metricool for tomorrow at 9 am"],
333
+ "docs": "https://help.metricool.com/how-to-connect-metricools-mcp-eqp9h"},
334
+ {"key": "typefully", "name": "Typefully", "publisher": "Typefully", "url": "https://mcp.typefully.com/mcp",
335
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
336
+ "tagline": "Drafts, queue and published posts",
337
+ "description": "Read your queue and published posts, and create, edit, schedule and delete drafts.",
338
+ "examples": ["Read my next scheduled draft in Typefully and check how it looks in the X app on my iPhone",
339
+ "After I post from my iPhone, add the same text to Typefully as a LinkedIn draft"],
340
+ "docs": "https://support.typefully.com/en/articles/13128440-typefully-mcp-server"},
341
+ {"key": "todoist", "name": "Todoist", "publisher": "Doist", "url": "https://ai.todoist.net/mcp",
342
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
343
+ "tagline": "Tasks and projects",
344
+ "description": "Read, create and update tasks and projects.",
345
+ "examples": ["Read my Todoist tasks due today and do each errand that fits on my iPhone",
346
+ "After you set a reminder on my iPhone, add it as a Todoist task"],
347
+ "docs": "https://developer.todoist.com/api/v1/#tag/Todoist-MCP"},
348
+ {"key": "intercom", "name": "Intercom", "publisher": "Intercom", "url": "https://mcp.intercom.com/mcp",
349
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
350
+ "tagline": "Conversations, contacts and articles",
351
+ "description": "Search conversations and contacts, read companies and Help Center articles, add internal notes, "
352
+ "and create or update articles.",
353
+ "examples": ["Read the newest open Intercom conversation and reproduce the customer's steps on my iPhone",
354
+ "After you test checkout on my iPhone, add an internal note in Intercom "
355
+ "conversation with the result"],
356
+ "docs": "https://developers.intercom.com/docs/guides/mcp"},
357
+ {"key": "klaviyo", "name": "Klaviyo", "publisher": "Klaviyo", "url": "https://mcp.klaviyo.com/mcp",
358
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
359
+ "tagline": "Profiles, campaigns, flows and reports",
360
+ "description": "Read profiles, lists, campaigns, flows and reports, and create or update them.",
361
+ "examples": ["Read my latest Klaviyo campaign and open the email on my iPhone to check how it renders",
362
+ "Add the contact I just saved on my iPhone to my Klaviyo list Newsletter"],
363
+ "docs": "https://developers.klaviyo.com/en/docs/klaviyo_mcp_server"},
364
+ {"key": "attio", "name": "Attio", "publisher": "Attio", "url": "https://mcp.attio.com/mcp",
365
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
366
+ "tagline": "Records, lists, notes and tasks",
367
+ "description": "Search and read CRM records, lists, notes and tasks, and create, update or delete them.",
368
+ "examples": ["Read today's tasks in Attio and message each person on my iPhone",
369
+ "After you call a lead from my iPhone, add a note to their Attio record"],
370
+ "docs": "https://docs.attio.com/mcp/overview"},
371
+ {"key": "webflow", "name": "Webflow", "publisher": "Webflow", "url": "https://mcp.webflow.com/mcp",
372
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
373
+ "tagline": "Sites, CMS, pages and design",
374
+ "description": "Read and edit your Webflow sites, CMS items, pages, assets, styles and forms.",
375
+ "examples": ["Publish the blog post I drafted in Webflow's CMS, then open the live page on my iPhone to check it",
376
+ "Read my Webflow form submissions and add each lead to Contacts on my iPhone"],
377
+ "docs": "https://developers.webflow.com/data/docs/ai-tools"},
378
+ {"key": "wix", "name": "Wix", "publisher": "Wix", "url": "https://mcp.wix.com/mcp", "auth": "oauth", "gated": True,
379
+ "access": "Reads and writes", "audience": "everyday", "tagline": "Sites, stores, bookings and CMS",
380
+ "description": "List your Wix sites, read and change their business data, and create, update or publish sites.",
381
+ "examples": ["Read today's bookings on my Wix site and add each one to Calendar on my iPhone",
382
+ "Add a product to my Wix store, then open the store page on my iPhone to check it"],
383
+ "docs": "https://dev.wix.com/docs/sdk/articles/use-the-wix-mcp/about-the-wix-mcp.md"},
384
+ {"key": "beehiiv", "name": "beehiiv", "publisher": "beehiiv", "url": "https://mcp.beehiiv.com/mcp",
385
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
386
+ "tagline": "Posts, subscribers and automations",
387
+ "description": "Read posts, subscribers, metrics and podcasts, and create drafts, "
388
+ "segments, forms and automations.",
389
+ "examples": ["Draft a post in beehiiv from the note I wrote on my iPhone, then check it in the beehiiv app",
390
+ "Read last week's beehiiv metrics and text me the open rate from my iPhone"],
391
+ "docs": "https://www.beehiiv.com/support/article/39255979546263-getting-started-with-the-beehiiv-mcp"},
392
+ {"key": "vimeo", "name": "Vimeo", "publisher": "Vimeo", "url": "https://mcp.vimeo.com/mcp",
393
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
394
+ "tagline": "Videos, analytics and showcases",
395
+ "description": "Search your videos, read analytics, comments and transcripts, and manage showcases.",
396
+ "examples": ["Read the comments on my newest Vimeo video and reply to the top one in the Vimeo app on my iPhone",
397
+ "Find my newest Vimeo video and check on my iPhone that it plays"],
398
+ "docs": "https://help.vimeo.com/hc/en-us/articles/49442010684689-How-to-connect-your-Vimeo-account-to-Claude-MCP-Server"},
399
+ {"key": "helpscout", "name": "Help Scout", "publisher": "Help Scout", "url": "https://mcp.helpscout.net/mcp",
400
+ "auth": "oauth", "gated": True, "access": "Reads", "audience": "everyday",
401
+ "tagline": "Conversations, customers and reports",
402
+ "description": "Search conversations, read customers, inboxes, saved replies, workflows and reports, and read "
403
+ "Docs articles.",
404
+ "examples": ["Read the newest Help Scout conversation about a bug and repeat the steps on my iPhone",
405
+ "Find the Help Scout conversations about push notifications and check each one on my iPhone"],
406
+ "docs": "https://docs.helpscout.com/article/1779-connect-your-ai-agent-with-help-scout-to-search-conversations-and-pull-reports"},
407
+ {"key": "close", "name": "Close", "publisher": "Close", "url": "https://mcp.close.com/mcp",
408
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
409
+ "tagline": "Leads, contacts and opportunities",
410
+ "description": "Search leads, contacts, opportunities and activity, create notes and tasks, and update or delete "
411
+ "CRM data.",
412
+ "examples": ["Read my Close tasks due today and call each lead from my iPhone",
413
+ "After you text a lead from my iPhone, log a note on that lead in Close"],
414
+ "docs": "https://developer.close.com/mcp.md"},
415
+ {"key": "basecamp", "name": "Basecamp", "publisher": "37signals", "url": "https://mcp.basecamp.com/mcp",
416
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
417
+ "tagline": "Projects, to-dos and messages",
418
+ "description": "Search projects, to-dos, message boards, card tables and Campfire, and create or update them.",
419
+ "examples": ["Read my Basecamp to-dos due today and do each errand that fits on my iPhone",
420
+ "After you book a meeting on my iPhone, post the details to the Basecamp message board"],
421
+ "docs": "https://basecamp.com/mcp"},
422
+ {"key": "coda", "name": "Coda", "publisher": "Coda", "url": "https://coda.io/apis/mcp",
423
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
424
+ "tagline": "Docs, pages and tables",
425
+ "description": "Search docs, read pages and tables, and create or update pages and table rows.",
426
+ "examples": ["Read the checklist in my Coda doc and complete each item on my iPhone",
427
+ "After you finish the steps on my iPhone, mark each row Done in my Coda table"],
428
+ "docs": "https://help.superhuman.com/hc/en-us/articles/46210076980365-Connect-to-the-Coda-MCP"},
429
+ {"key": "miro", "name": "Miro", "publisher": "Miro", "url": "https://mcp.miro.com/", "auth": "oauth", "gated": True,
430
+ "access": "Reads and writes", "audience": "everyday", "tagline": "Boards, diagrams and comments",
431
+ "description": "Summarize and search boards, build boards and diagrams, and act on comments.",
432
+ "examples": ["Read the checklist on my Miro board and test each screen on my iPhone",
433
+ "After you capture the screens on my iPhone, add a summary to my Miro board"],
434
+ "docs": "https://developers.miro.com/docs/miro-mcp"},
435
+ {"key": "cal", "name": "Cal.com", "publisher": "Cal.com", "url": "https://mcp.cal.com/mcp",
436
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
437
+ "tagline": "Bookings, event types and schedules",
438
+ "description": "List bookings, event types, schedules and availability, and create, "
439
+ "reschedule or cancel bookings.",
440
+ "examples": ["Read tomorrow's Cal.com bookings and add each one to Calendar on my iPhone",
441
+ "After you accept a meeting on my iPhone, confirm that booking in Cal.com"],
442
+ "docs": "https://cal.com/docs/mcp-server"},
443
+ {"key": "granola", "name": "Granola", "publisher": "Granola", "url": "https://mcp.granola.ai/mcp",
444
+ "auth": "oauth", "gated": True, "access": "Reads", "audience": "everyday",
445
+ "tagline": "Meeting notes and transcripts",
446
+ "description": "Search and read your meeting notes, folders and transcripts, and ask questions across them.",
447
+ "examples": ["Read my Granola notes from this morning's call and add each action item to Reminders on my iPhone",
448
+ "After my call, find the follow-up email in Granola and send it from Mail on my iPhone"],
449
+ "docs": "https://docs.granola.ai/help-center/sharing/integrations/mcp"},
450
+ {"key": "fireflies", "name": "Fireflies", "publisher": "Fireflies.ai", "url": "https://api.fireflies.ai/mcp",
451
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
452
+ "tagline": "Meeting transcripts and summaries",
453
+ "description": "Search meeting transcripts and summaries, and create soundbite clips from them.",
454
+ "examples": ["Find the action items from my last Fireflies meeting and text each one from my iPhone",
455
+ "Check Fireflies for what I promised Dana yesterday, then add it to Calendar on my iPhone"],
456
+ "docs": "https://docs.fireflies.ai/getting-started/mcp-configuration"},
457
+ {"key": "jotform", "name": "Jotform", "publisher": "Jotform", "url": "https://mcp.jotform.com",
458
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
459
+ "tagline": "Forms and submissions",
460
+ "description": "List, create and edit forms, and create and read their submissions.",
461
+ "examples": ["Read this week's Jotform submissions and text each person a thank-you from my iPhone",
462
+ "Fill in my Jotform contact form on my iPhone, then check Jotform that the submission arrived"],
463
+ "docs": "https://www.jotform.com/developers/mcp"},
464
+ {"key": "square", "name": "Square", "publisher": "Square", "url": "https://mcp.squareup.com/mcp",
465
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
466
+ "tagline": "Payments, orders and customers",
467
+ "description": "Look up and change customers, orders, catalog items, invoices and bookings, and run payments and "
468
+ "refunds, through Square's API.",
469
+ "examples": ["Check today's open Square orders and text each customer that theirs is ready from my iPhone",
470
+ "Look up the Square payment for order 1042 and show the receipt on my iPhone"],
471
+ "docs": "https://developer.squareup.com/docs/mcp"},
472
+ {"key": "paypal", "name": "PayPal", "publisher": "PayPal", "url": "https://mcp.paypal.com/http",
473
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
474
+ "tagline": "Invoices, orders and refunds",
475
+ "description": "Create and send invoices, manage orders, refunds and subscriptions, and read transactions and "
476
+ "disputes.",
477
+ "examples": ["Create a PayPal invoice for $120 to the client in my latest iPhone text and send it",
478
+ "Check PayPal for new payments today and add each customer's name to Reminders on my iPhone"],
479
+ "docs": "https://developer.paypal.com/ai-tools/mcp-server"},
480
+ {"key": "mercury", "name": "Mercury", "publisher": "Mercury", "url": "https://mcp.mercury.com/mcp",
481
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
482
+ "tagline": "Accounts, balances and transactions",
483
+ "description": "Read accounts, balances, transactions, cards and recipients, and update transaction notes and "
484
+ "categories.",
485
+ "examples": ["Check Mercury for yesterday's transactions and add any missing receipts from Photos on my iPhone to "
486
+ "my notes",
487
+ "Read this month's Mercury spend by category and put the total in a note on my iPhone"],
488
+ "docs": "https://docs.mercury.com/docs/connecting-mercury-mcp"},
489
+ {"key": "ramp", "name": "Ramp", "publisher": "Ramp", "url": "https://mcp.ramp.com/mcp",
490
+ "auth": "oauth", "gated": True, "access": "Reads and writes", "audience": "everyday",
491
+ "tagline": "Spend, cards and expenses",
492
+ "description": "Query spend, transactions and cards, and act on Ramp as the user who signed in.",
493
+ "examples": ["Check Ramp for transactions missing receipts and open each receipt email in Mail on my iPhone",
494
+ "Read my open Ramp expenses and list which ones still need a memo in Notes on my iPhone"],
495
+ "docs": "https://agents.ramp.com/docs/mcp/overview"},
496
+ {"key": "clickup", "name": "ClickUp", "publisher": "ClickUp", "url": "https://mcp.clickup.com/mcp", "auth": "oauth",
497
+ "access": "Reads and writes", "audience": "everyday", "tagline": "Tasks, docs and time",
498
+ "description": "Find, create and update tasks, search docs and comments, and track time.",
499
+ "examples": ["Read my ClickUp tasks due today and reply to each client's DM on my iPhone",
500
+ "Add the link of the post I just made on my iPhone to its ClickUp task"],
501
+ "docs": "https://developer.clickup.com/docs/connect-an-ai-assistant-to-clickups-mcp-server"},
502
+ {"key": "zapier", "name": "Zapier", "publisher": "Zapier", "url": "https://mcp.zapier.com/api/v1/connect",
503
+ "auth": "oauth", "access": "Reads and writes", "audience": "everyday", "tagline": "Actions in the "
504
+ "apps you connected to Zapier",
505
+ "description": "Run actions in the apps your Zapier account connects, such as adding a row or a CRM contact.",
506
+ "examples": ["Read the new DM on my iPhone and add the lead to my CRM through Zapier",
507
+ "Use Zapier to add today's post stats from my iPhone to my spreadsheet"],
508
+ "docs": "https://docs.zapier.com/mcp/get-started/quickstart"},
509
+ {"key": "make", "name": "Make", "publisher": "Make", "url": "https://mcp.make.com", "gated": True, "auth": "oauth",
510
+ "access": "Reads and writes", "audience": "everyday", "tagline": "Your scenarios, run as tools",
511
+ "description": "Run your Make scenarios with the inputs they ask for, and read what they return.",
512
+ "examples": ["Run my Make scenario New lead with the name and email from this DM on my iPhone",
513
+ "Read the order on my iPhone and send it to my Make scenario Fulfil order"],
514
+ "docs": "https://developers.make.com/mcp-server"},
515
+ {"key": "monday", "name": "monday.com", "publisher": "monday.com", "url": "https://mcp.monday.com/mcp",
516
+ "gated": True, "auth": "mobster_app", "needs_app": True,
517
+ "scopes": "me:read boards:read boards:write workspaces:read users:read updates:read updates:write",
518
+ "access": "Reads and writes", "audience": "everyday", "tagline": "Boards, items and updates",
519
+ "description": "Read your boards, create and update items and their columns, and post updates.",
520
+ "examples": ["Add each new client DM on my iPhone as an item on my monday.com board Leads",
521
+ "Read today's items on my monday.com board Content and post each one from my iPhone"],
522
+ "docs": "https://developer.monday.com/api-reference/docs/mondaycom-mcp"},
523
+ {"key": "microsoft-365", "name": "Microsoft 365", "publisher": "Microsoft",
524
+ "url": "https://graph.microsoft.com/v1.0",
525
+ "gated": True, "auth": "mobster_app", "needs_app": True, "access": "Reads and writes", "audience": "everyday",
526
+ "tagline": "Outlook, Calendar, OneDrive and Teams chats",
527
+ "always_ask": ("send_mail", "send_chat_message", "create_event"),
528
+ "description": "Read your Outlook mail, calendar, OneDrive files, contacts and Teams chats, and send email and "
529
+ "chat messages and add events after you confirm.",
530
+ "examples": ["Read the confirmation email in Outlook and add the trip to the Calendar on my iPhone",
531
+ "Email the screenshot of my order status from my iPhone to my team in Outlook"],
532
+ "docs": "https://learn.microsoft.com/en-us/graph/overview"},
533
+ {"key": "bitrise", "name": "Bitrise", "publisher": "Bitrise", "url": "https://mcp.bitrise.io", "gated": True,
534
+ "auth": "oauth", "access": "Reads and writes", "audience": "builder", "tagline": "Apps, builds and artifacts",
535
+ "scopes": "openid offline_access",
536
+ "description": "List your apps and builds, read build logs and artifacts, and start builds.",
537
+ "examples": ["Check my latest Bitrise build and test the app on my iPhone once it's green",
538
+ "Start a Bitrise build of main, then test sign-in on my iPhone when it finishes"],
539
+ "docs": "https://docs.bitrise.io/en/bitrise-platform/ai/bitrise-mcp"},
540
+ {"key": "calendly", "name": "Calendly", "publisher": "Calendly", "url": "https://mcp.calendly.com", "auth": "oauth",
541
+ "gated": True, "redirect_host": "localhost", "access": "Reads and writes", "audience": "everyday",
542
+ "tagline": "Event types, meetings and booking links",
543
+ "description": "Find open times and your meetings, create single-use booking links, and book or cancel meetings.",
544
+ "examples": ["Send a single-use Calendly link to the client who just DMed me on my iPhone",
545
+ "Read my Calendly meetings for today and add each one's address to my Maps favourites"],
546
+ "docs": "https://developer.calendly.com/calendly-mcp-server"},
547
+ )
548
+
549
+
550
+ def preset(key):
551
+ return next((dict(p) for p in PRESETS if p["key"] == key), None)
552
+
553
+
554
+ def refusal(p, apps):
555
+ """Why Settings doesn't offer the preset ``p`` now, as a sentence that says what to do, or None when it does: it is
556
+ gated and not tested yet, or it ``needs_app`` and Mobster's own app isn't ready (shared.Apps)."""
557
+ if p.get("gated") and not apps.tested(p["key"]):
558
+ return (f"Mobster hasn't finished testing {p['name']}, so it isn't offered yet. Add its server under Your own "
559
+ "server instead")
560
+ app = apps.get(p["key"]) if p.get("needs_app") else None
561
+ if isinstance(app, shared.Unavailable):
562
+ return f"{shared.why(p['name'], app.reason)}, so it isn't offered yet. Try again later"
563
+ return None
564
+
565
+
566
+ def offered(p, apps):
567
+ """Whether Settings offers the preset ``p`` now (``refusal``)."""
568
+ return refusal(p, apps) is None
569
+
570
+
571
+ def not_yet(apps):
572
+ """The presets Settings doesn't offer now, each with why, so a person looking for one (Slack) is told plainly."""
573
+ return [{"key": p["key"], "name": p["name"], "why": refusal(p, apps) + "."}
574
+ for p in PRESETS if not offered(p, apps)]
575
+
576
+
577
+ def public(apps):
578
+ """The presets as GET /api/connectors gives them."""
579
+ listed = []
580
+ for p in (p for p in PRESETS if offered(p, apps)):
581
+ item = {"key": p["key"], "name": p["name"], "url": p["url"], "auth": p["auth"],
582
+ "tokenLabel": p.get("token_label"),
583
+ "access": p["access"], "publisher": p["publisher"], "tagline": p["tagline"],
584
+ "examples": list(p.get("examples", ())), "description": p["description"], "docs": p["docs"],
585
+ "audience": p["audience"], "selfManaged": bool(p.get("instance_path"))}
586
+ if p["auth"] == "mobster_app":
587
+ app = apps.get(p["key"])
588
+ ready = isinstance(app, oauth.MobsterApp)
589
+ item.update({"auth": "oauth"} if ready else {"auth": p["fallback"], "fallbackReason": app.reason})
590
+ listed.append(item)
591
+ return listed