xcode-mcp-server 1.3.11b4__tar.gz → 1.3.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/PKG-INFO +2 -2
  2. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/pyproject.toml +1 -1
  3. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/__init__.py +1 -1
  4. xcode_mcp_server-1.3.12/xcode_mcp_server/server.py +80 -0
  5. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/build_project.py +2 -2
  6. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/clean_project.py +2 -2
  7. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/create_project.py +2 -2
  8. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/debug_list_notification_history.py +2 -2
  9. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_active_run_destination.py +2 -2
  10. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_build_errors.py +2 -2
  11. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_build_results.py +2 -2
  12. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_directory_listing.py +2 -2
  13. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_directory_tree.py +2 -2
  14. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_latest_test_results.py +2 -2
  15. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_project_schemes.py +2 -2
  16. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_runtime_output.py +2 -2
  17. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/get_xcode_projects.py +2 -2
  18. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/list_booted_simulators.py +2 -2
  19. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/list_mac_app_windows.py +2 -2
  20. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/list_project_tests.py +2 -2
  21. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/list_run_destinations.py +2 -2
  22. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/list_running_mac_apps.py +2 -2
  23. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/run_project_tests.py +2 -2
  24. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/run_project_unmonitored.py +2 -2
  25. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/run_project_until_terminated.py +2 -2
  26. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/run_project_with_user_interaction.py +2 -2
  27. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/set_run_destination.py +2 -2
  28. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/stop_project.py +2 -2
  29. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/take_app_screenshot.py +2 -2
  30. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/take_simulator_screenshot.py +2 -2
  31. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/take_window_screenshot.py +2 -2
  32. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/take_xcode_screenshot.py +2 -2
  33. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/version.py +2 -2
  34. xcode_mcp_server-1.3.11b4/xcode_mcp_server/server.py +0 -29
  35. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/.github/workflows/claude-code.yml +0 -0
  36. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/.github/workflows/claude-self-review.yml +0 -0
  37. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/.gitignore +0 -0
  38. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/CLAUDE.md +0 -0
  39. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/LICENSE +0 -0
  40. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/README.md +0 -0
  41. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/TODO.md +0 -0
  42. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/__PUBLIC_REPO +0 -0
  43. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/_venv-setup.sh +0 -0
  44. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/deploy-beta.sh +0 -0
  45. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/deploy.sh +0 -0
  46. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/dev.sh +0 -0
  47. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/info.sh +0 -0
  48. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/requirements.txt +0 -0
  49. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/run_local_for_claude.sh +0 -0
  50. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/cleanup_tests.sh +0 -0
  51. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/create_projects.py +0 -0
  52. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/create_real_projects.py +0 -0
  53. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/create_spm_projects.sh +0 -0
  54. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/create_xcode_projects.sh +0 -0
  55. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/run_all_tests.sh +0 -0
  56. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/setup_test_projects.sh +0 -0
  57. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/scripts/setup_tests.sh +0 -0
  58. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  59. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  60. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/Assets.xcassets/Contents.json +0 -0
  61. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/ContentView.swift +0 -0
  62. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp/iosEmptySwiftUIAppApp.swift +0 -0
  63. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.pbxproj +0 -0
  64. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  65. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  66. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/iosEmptySwiftUIApp/iosEmptySwiftUIApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  67. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp/main.swift +0 -0
  68. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.pbxproj +0 -0
  69. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  70. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  71. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptyCommandLineApp/macosEmptyCommandLineApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  72. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  73. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  74. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/Assets.xcassets/Contents.json +0 -0
  75. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/ContentView.swift +0 -0
  76. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp/macosEmptySwiftUIAppApp.swift +0 -0
  77. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.pbxproj +0 -0
  78. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  79. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  80. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/fromXcode/macosEmptySwiftUIApp/macosEmptySwiftUIApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  81. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/BrokenApp/BrokenApp/main.swift +0 -0
  82. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.pbxproj +0 -0
  83. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  84. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  85. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/BrokenApp/BrokenApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  86. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/ConsoleApp/ConsoleApp/main.swift +0 -0
  87. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.pbxproj +0 -0
  88. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  89. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  90. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/ConsoleApp/ConsoleApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  91. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SimpleApp/SimpleApp/main.swift +0 -0
  92. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.pbxproj +0 -0
  93. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  94. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  95. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SimpleApp/SimpleApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  96. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  97. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  98. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/Assets.xcassets/Contents.json +0 -0
  99. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/ContentView.swift +0 -0
  100. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp/macosEmptySwiftUIAppApp.swift +0 -0
  101. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.pbxproj +0 -0
  102. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  103. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  104. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/SwiftUITestApp/SwiftUITestApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  105. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  106. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  107. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp/Assets.xcassets/Contents.json +0 -0
  108. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp/ContentView.swift +0 -0
  109. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp/iosEmptySwiftUIAppApp.swift +0 -0
  110. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.pbxproj +0 -0
  111. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  112. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/project.xcworkspace/xcuserdata/andrew.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  113. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/test_projects/templates/iOSTestApp/iOSTestApp.xcodeproj/xcuserdata/andrew.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  114. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/debug_build.py +0 -0
  115. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/debug_test.py +0 -0
  116. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/test_basic.py +0 -0
  117. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/test_build.py +0 -0
  118. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/test_build_log_parser.py +0 -0
  119. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/test_fixed.py +0 -0
  120. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/test_manifest_wait.py +0 -0
  121. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/test_minimal.py +0 -0
  122. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/tests/test_runner.py +0 -0
  123. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/__main__.py +0 -0
  124. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/cli.py +0 -0
  125. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/config_manager.py +0 -0
  126. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/config_ui.py +0 -0
  127. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/exceptions.py +0 -0
  128. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/security.py +0 -0
  129. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/tools/__init__.py +0 -0
  130. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/__init__.py +0 -0
  131. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/applescript.py +0 -0
  132. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/build_log_parser.py +0 -0
  133. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/decode_active_destination.swift +0 -0
  134. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/decode_xcode_recents.swift +0 -0
  135. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/paths.py +0 -0
  136. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/project_templates.py +0 -0
  137. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/screenshot.py +0 -0
  138. {xcode_mcp_server-1.3.11b4 → xcode_mcp_server-1.3.12}/xcode_mcp_server/utils/xcresult.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xcode-mcp-server
3
- Version: 1.3.11b4
3
+ Version: 1.3.12
4
4
  Summary: Drew's MCP server for Xcode integration
5
5
  Project-URL: Homepage, https://github.com/drewster99/xcode-mcp-server
6
6
  Project-URL: Repository, https://github.com/drewster99/xcode-mcp-server
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Requires-Python: >=3.10
20
- Requires-Dist: mcp[cli]>=1.2.0
20
+ Requires-Dist: mcp[cli]>=1.7.0
21
21
  Requires-Dist: questionary>=2.0.0
22
22
  Requires-Dist: rich>=13.0.0
23
23
  Description-Content-Type: text/markdown
@@ -23,7 +23,7 @@ classifiers = [
23
23
  "Programming Language :: Python :: 3.12",
24
24
  ]
25
25
  dependencies = [
26
- "mcp[cli]>=1.2.0",
26
+ "mcp[cli]>=1.7.0",
27
27
  "questionary>=2.0.0",
28
28
  "rich>=13.0.0",
29
29
  ]
@@ -1,6 +1,6 @@
1
1
  """Xcode MCP Server - Model Context Protocol server for Xcode integration"""
2
2
 
3
- __version__ = "1.3.11b4"
3
+ __version__ = "1.3.12"
4
4
 
5
5
 
6
6
  def main():
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env python3
2
+ """FastMCP server instance for Xcode MCP Server"""
3
+
4
+ from mcp.server.fastmcp import FastMCP
5
+ from mcp.types import ToolAnnotations
6
+
7
+ # Initialize the MCP server
8
+ mcp = FastMCP("Xcode MCP Server",
9
+ instructions="""
10
+ This server provides access to the Xcode IDE. For any project intended
11
+ for Apple platforms, such as iOS or macOS, this MCP server is the best
12
+ way to build or run .xcodeproj or .xcworkspace Xcode projects, and should
13
+ ALWAYS be preferred over using `xcodebuild`, `swift build`, or
14
+ `swift package build`. Building with this tool ensures the build happens
15
+ exactly the same way as when the user builds with Xcode, with all the same
16
+ settings, so you will get the same results the user sees. The user can also
17
+ see any results immediately and a subsequent build and run by the user will
18
+ happen almost instantly for the user.
19
+
20
+ Call `get_xcode_projects` to find Xcode project (.xcodeproj) and
21
+ Xcode workspace (.xcworkspace) folders under a given root folder.
22
+
23
+ Call `get_project_schemes` to get the build scheme names for a given
24
+ .xcodeproj or .xcworkspace.
25
+
26
+ Call `build_project` to build the project and get back the first 25 lines of
27
+ error (and/or potentially warning) output. `build_project` will default to the
28
+ active scheme if none is provided.
29
+ """
30
+ )
31
+
32
+ # Tool behavior annotations (advisory hints for MCP clients).
33
+ #
34
+ # These describe how a tool affects its environment so clients can gate
35
+ # auto-approval and label tools appropriately. The build/run/test tools are
36
+ # marked destructive AND open-world: a build executes arbitrary third-party
37
+ # code (Run Script phases, SPM plugins/macros) and resolves packages from
38
+ # arbitrary remote hosts, so we cannot honestly claim it is additive-only,
39
+ # idempotent, or hermetic.
40
+
41
+ # Pure observers: reading state, listing, screenshots. No mutation, no network.
42
+ TOOL_READONLY = ToolAnnotations(
43
+ readOnlyHint=True,
44
+ idempotentHint=True,
45
+ destructiveHint=False,
46
+ openWorldHint=False,
47
+ )
48
+
49
+ # Builds and runs: execute arbitrary build/install scripts and fetch packages.
50
+ TOOL_BUILD = ToolAnnotations(
51
+ readOnlyHint=False,
52
+ idempotentHint=False,
53
+ destructiveHint=True,
54
+ openWorldHint=True,
55
+ )
56
+
57
+ # Clean: deletes build artifacts. Destructive but locally bounded and idempotent.
58
+ TOOL_CLEAN = ToolAnnotations(
59
+ readOnlyHint=False,
60
+ idempotentHint=True,
61
+ destructiveHint=True,
62
+ openWorldHint=False,
63
+ )
64
+
65
+ # Create: writes a fresh template and refuses to overwrite. Additive, local.
66
+ TOOL_CREATE = ToolAnnotations(
67
+ readOnlyHint=False,
68
+ idempotentHint=False,
69
+ destructiveHint=False,
70
+ openWorldHint=False,
71
+ )
72
+
73
+ # Settles a piece of local state (run destination, stopping a run). Re-applying
74
+ # the same call lands on the same state, and nothing is destroyed.
75
+ TOOL_MUTATING_IDEMPOTENT = ToolAnnotations(
76
+ readOnlyHint=False,
77
+ idempotentHint=True,
78
+ destructiveHint=False,
79
+ openWorldHint=False,
80
+ )
@@ -8,7 +8,7 @@ import sys
8
8
  import time
9
9
  from typing import Optional
10
10
 
11
- from xcode_mcp_server.server import mcp
11
+ from xcode_mcp_server.server import mcp, TOOL_BUILD
12
12
  from xcode_mcp_server.config_manager import apply_config
13
13
  from xcode_mcp_server.security import validate_and_normalize_project_path
14
14
  from xcode_mcp_server.exceptions import InvalidParameterError, XCodeMCPError
@@ -283,7 +283,7 @@ def _supplement_with_xcactivitylog_warnings(
283
283
  return errors_json
284
284
 
285
285
 
286
- @mcp.tool()
286
+ @mcp.tool(annotations=TOOL_BUILD)
287
287
  @apply_config
288
288
  def build_project(project_path: str,
289
289
  scheme: Optional[str] = None,
@@ -3,7 +3,7 @@
3
3
 
4
4
  import os
5
5
 
6
- from xcode_mcp_server.server import mcp
6
+ from xcode_mcp_server.server import mcp, TOOL_CLEAN
7
7
  from xcode_mcp_server.config_manager import apply_config
8
8
  from xcode_mcp_server.security import validate_and_normalize_project_path
9
9
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -17,7 +17,7 @@ from xcode_mcp_server.utils.applescript import (
17
17
  )
18
18
 
19
19
 
20
- @mcp.tool()
20
+ @mcp.tool(annotations=TOOL_CLEAN)
21
21
  @apply_config
22
22
  def clean_project(project_path: str) -> str:
23
23
  """
@@ -5,7 +5,7 @@ import json
5
5
  import os
6
6
  from typing import Optional
7
7
 
8
- from xcode_mcp_server.server import mcp
8
+ from xcode_mcp_server.server import mcp, TOOL_CREATE
9
9
  from xcode_mcp_server.config_manager import apply_config
10
10
  from xcode_mcp_server.security import validate_parent_for_new_project
11
11
  from xcode_mcp_server.exceptions import InvalidParameterError
@@ -23,7 +23,7 @@ from xcode_mcp_server.tools.get_xcode_projects import register_created_project
23
23
  SUPPORTED_PLATFORMS = {"ios", "macos"}
24
24
 
25
25
 
26
- @mcp.tool()
26
+ @mcp.tool(annotations=TOOL_CREATE)
27
27
  @apply_config
28
28
  def create_project(
29
29
  parent_directory: str,
@@ -5,7 +5,7 @@ import os
5
5
  import subprocess
6
6
  import sys
7
7
 
8
- from xcode_mcp_server.server import mcp
8
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
9
9
  from xcode_mcp_server.config_manager import apply_config
10
10
  from xcode_mcp_server.utils.applescript import get_notification_history
11
11
  from xcode_mcp_server.utils.paths import DEBUG_DIR
@@ -16,7 +16,7 @@ from xcode_mcp_server.utils.paths import DEBUG_DIR
16
16
  NOTIFICATION_HISTORY_FILE = os.path.join(DEBUG_DIR, "notification-history.txt")
17
17
 
18
18
 
19
- @mcp.tool()
19
+ @mcp.tool(annotations=TOOL_READONLY)
20
20
  @apply_config
21
21
  def debug_list_notification_history() -> str:
22
22
  """
@@ -7,7 +7,7 @@ import os
7
7
  import subprocess
8
8
  import sys
9
9
 
10
- from xcode_mcp_server.server import mcp
10
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
11
11
  from xcode_mcp_server.config_manager import apply_config
12
12
  from xcode_mcp_server.security import validate_and_normalize_project_path
13
13
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -162,7 +162,7 @@ def _lookup_simulator_info(udid: str) -> tuple:
162
162
  return ("", "")
163
163
 
164
164
 
165
- @mcp.tool()
165
+ @mcp.tool(annotations=TOOL_READONLY)
166
166
  @apply_config
167
167
  def get_active_run_destination(
168
168
  project_path: str,
@@ -3,7 +3,7 @@
3
3
 
4
4
  from typing import Optional
5
5
 
6
- from xcode_mcp_server.server import mcp
6
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
7
7
  from xcode_mcp_server.config_manager import apply_config
8
8
  from xcode_mcp_server.security import validate_and_normalize_project_path
9
9
  from xcode_mcp_server.exceptions import InvalidParameterError, XCodeMCPError
@@ -11,7 +11,7 @@ from xcode_mcp_server.utils.applescript import escape_applescript_string, run_ap
11
11
  from xcode_mcp_server.utils.xcresult import extract_build_errors_and_warnings
12
12
 
13
13
 
14
- @mcp.tool()
14
+ @mcp.tool(annotations=TOOL_READONLY)
15
15
  @apply_config
16
16
  def get_build_errors(project_path: str,
17
17
  include_warnings: Optional[bool] = None,
@@ -5,7 +5,7 @@ import os
5
5
  import json
6
6
  from typing import Optional
7
7
 
8
- from xcode_mcp_server.server import mcp
8
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
9
9
  from xcode_mcp_server.config_manager import apply_config
10
10
  from xcode_mcp_server.security import validate_and_normalize_project_path
11
11
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -15,7 +15,7 @@ from xcode_mcp_server.utils.build_log_parser import (
15
15
  )
16
16
 
17
17
 
18
- @mcp.tool()
18
+ @mcp.tool(annotations=TOOL_READONLY)
19
19
  @apply_config
20
20
  def get_build_results(project_path: str,
21
21
  max_warnings: int = 50) -> str:
@@ -6,14 +6,14 @@ import re
6
6
  import datetime
7
7
  from typing import Optional
8
8
 
9
- from xcode_mcp_server.server import mcp
9
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
10
10
  from xcode_mcp_server.config_manager import apply_config
11
11
  from xcode_mcp_server.security import validate_and_normalize_directory_path
12
12
  from xcode_mcp_server.exceptions import AccessDeniedError, InvalidParameterError, XCodeMCPError
13
13
  from xcode_mcp_server.utils.applescript import show_error_notification
14
14
 
15
15
 
16
- @mcp.tool()
16
+ @mcp.tool(annotations=TOOL_READONLY)
17
17
  @apply_config
18
18
  def get_directory_listing(directory_path: str,
19
19
  regex_filter: Optional[str] = None,
@@ -4,7 +4,7 @@
4
4
  import os
5
5
  from typing import List
6
6
 
7
- from xcode_mcp_server.server import mcp
7
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
8
8
  from xcode_mcp_server.config_manager import apply_config
9
9
  from xcode_mcp_server.security import validate_and_normalize_directory_path
10
10
  from xcode_mcp_server.exceptions import InvalidParameterError, XCodeMCPError
@@ -32,7 +32,7 @@ SKIP_DIR_NAMES = frozenset([
32
32
  MAX_TREE_LINES = 5000
33
33
 
34
34
 
35
- @mcp.tool()
35
+ @mcp.tool(annotations=TOOL_READONLY)
36
36
  @apply_config
37
37
  def get_directory_tree(directory_path: str, max_depth: int = 4) -> str:
38
38
  """
@@ -5,7 +5,7 @@ import os
5
5
  import json
6
6
  import sys
7
7
 
8
- from xcode_mcp_server.server import mcp
8
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
9
9
  from xcode_mcp_server.config_manager import apply_config
10
10
  from xcode_mcp_server.security import validate_and_normalize_project_path
11
11
  from xcode_mcp_server.utils.applescript import (
@@ -18,7 +18,7 @@ from xcode_mcp_server.utils.applescript import (
18
18
  from xcode_mcp_server.utils.xcresult import find_xcresult_bundle, extract_test_results_from_xcresult
19
19
 
20
20
 
21
- @mcp.tool()
21
+ @mcp.tool(annotations=TOOL_READONLY)
22
22
  @apply_config
23
23
  def get_latest_test_results(project_path: str) -> str:
24
24
  """
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """get_project_schemes tool - Get available build schemes"""
3
3
 
4
- from xcode_mcp_server.server import mcp
4
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
5
5
  from xcode_mcp_server.config_manager import apply_config
6
6
  from xcode_mcp_server.security import validate_and_normalize_project_path
7
7
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -14,7 +14,7 @@ from xcode_mcp_server.utils.applescript import (
14
14
  )
15
15
 
16
16
 
17
- @mcp.tool()
17
+ @mcp.tool(annotations=TOOL_READONLY)
18
18
  @apply_config
19
19
  def get_project_schemes(project_path: str) -> str:
20
20
  """
@@ -5,7 +5,7 @@ import sys
5
5
  import json
6
6
  from typing import Optional
7
7
 
8
- from xcode_mcp_server.server import mcp
8
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
9
9
  from xcode_mcp_server.config_manager import apply_config
10
10
  from xcode_mcp_server.security import validate_and_normalize_project_path
11
11
  from xcode_mcp_server.exceptions import InvalidParameterError, XCodeMCPError
@@ -13,7 +13,7 @@ from xcode_mcp_server.utils.xcresult import find_xcresult_for_project, extract_c
13
13
  from xcode_mcp_server.utils.applescript import show_error_notification, show_warning_notification, show_result_notification
14
14
 
15
15
 
16
- @mcp.tool()
16
+ @mcp.tool(annotations=TOOL_READONLY)
17
17
  @apply_config
18
18
  def get_runtime_output(project_path: str,
19
19
  regex_filter: Optional[str] = None,
@@ -6,7 +6,7 @@ import sys
6
6
  import subprocess
7
7
  import re
8
8
 
9
- from xcode_mcp_server.server import mcp
9
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
10
10
  from xcode_mcp_server.config_manager import apply_config
11
11
  from xcode_mcp_server.security import ALLOWED_FOLDERS, is_path_allowed
12
12
  from xcode_mcp_server.exceptions import AccessDeniedError, InvalidParameterError
@@ -179,7 +179,7 @@ def _filter_project_results(paths: list[str], search_paths: list[str] = None, ma
179
179
  return final_results
180
180
 
181
181
 
182
- @mcp.tool()
182
+ @mcp.tool(annotations=TOOL_READONLY)
183
183
  @apply_config
184
184
  def get_xcode_projects(
185
185
  search_path: str = "",
@@ -3,14 +3,14 @@
3
3
 
4
4
  import subprocess
5
5
 
6
- from xcode_mcp_server.server import mcp
6
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
7
7
  from xcode_mcp_server.config_manager import apply_config
8
8
  from xcode_mcp_server.exceptions import XCodeMCPError
9
9
  from xcode_mcp_server.utils.applescript import show_result_notification, show_error_notification
10
10
  from xcode_mcp_server.utils.screenshot import _get_booted_simulators
11
11
 
12
12
 
13
- @mcp.tool()
13
+ @mcp.tool(annotations=TOOL_READONLY)
14
14
  @apply_config
15
15
  def list_booted_simulators() -> str:
16
16
  """
@@ -5,13 +5,13 @@ import os
5
5
  import tempfile
6
6
  import subprocess
7
7
 
8
- from xcode_mcp_server.server import mcp
8
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
9
9
  from xcode_mcp_server.config_manager import apply_config
10
10
  from xcode_mcp_server.exceptions import XCodeMCPError
11
11
  from xcode_mcp_server.utils.applescript import show_result_notification, show_error_notification
12
12
 
13
13
 
14
- @mcp.tool()
14
+ @mcp.tool(annotations=TOOL_READONLY)
15
15
  @apply_config
16
16
  def list_mac_app_windows() -> str:
17
17
  """
@@ -6,14 +6,14 @@ import re
6
6
  import subprocess
7
7
  import sys
8
8
 
9
- from xcode_mcp_server.server import mcp
9
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
10
10
  from xcode_mcp_server.config_manager import apply_config
11
11
  from xcode_mcp_server.exceptions import XCodeMCPError
12
12
  from xcode_mcp_server.security import validate_and_normalize_project_path
13
13
  from xcode_mcp_server.utils.applescript import show_result_notification, show_error_notification
14
14
 
15
15
 
16
- @mcp.tool()
16
+ @mcp.tool(annotations=TOOL_READONLY)
17
17
  @apply_config
18
18
  def list_project_tests(project_path: str) -> str:
19
19
  """
@@ -8,7 +8,7 @@ import subprocess
8
8
  import sys
9
9
  from typing import Optional
10
10
 
11
- from xcode_mcp_server.server import mcp
11
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
12
12
  from xcode_mcp_server.config_manager import apply_config
13
13
  from xcode_mcp_server.security import validate_and_normalize_project_path
14
14
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -73,7 +73,7 @@ def _parse_destination_line(line: str) -> Optional[dict]:
73
73
  return result
74
74
 
75
75
 
76
- @mcp.tool()
76
+ @mcp.tool(annotations=TOOL_READONLY)
77
77
  @apply_config
78
78
  def list_run_destinations(
79
79
  project_path: str,
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env python3
2
2
  """list_running_mac_apps tool - List running macOS applications"""
3
3
 
4
- from xcode_mcp_server.server import mcp
4
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
5
5
  from xcode_mcp_server.config_manager import apply_config
6
6
  from xcode_mcp_server.exceptions import XCodeMCPError
7
7
  from xcode_mcp_server.utils.applescript import show_notification, run_applescript, show_result_notification, show_error_notification
8
8
 
9
9
 
10
- @mcp.tool()
10
+ @mcp.tool(annotations=TOOL_READONLY)
11
11
  @apply_config
12
12
  def list_running_mac_apps() -> str:
13
13
  """
@@ -7,7 +7,7 @@ import time
7
7
  import json
8
8
  from typing import Optional, List
9
9
 
10
- from xcode_mcp_server.server import mcp
10
+ from xcode_mcp_server.server import mcp, TOOL_BUILD
11
11
  from xcode_mcp_server.config_manager import apply_config
12
12
  from xcode_mcp_server.security import validate_and_normalize_project_path
13
13
  from xcode_mcp_server.exceptions import InvalidParameterError
@@ -149,7 +149,7 @@ from xcode_mcp_server.utils.xcresult import find_xcresult_bundle, extract_test_r
149
149
  # return f"⏳ Tests did not complete within {max_wait_seconds} seconds"
150
150
 
151
151
 
152
- @mcp.tool()
152
+ @mcp.tool(annotations=TOOL_BUILD)
153
153
  @apply_config
154
154
  def run_project_tests(project_path: str,
155
155
  scheme: Optional[str] = None) -> str:
@@ -4,7 +4,7 @@
4
4
  import os
5
5
  from typing import Optional
6
6
 
7
- from xcode_mcp_server.server import mcp
7
+ from xcode_mcp_server.server import mcp, TOOL_BUILD
8
8
  from xcode_mcp_server.config_manager import apply_config
9
9
  from xcode_mcp_server.security import validate_and_normalize_project_path
10
10
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -17,7 +17,7 @@ from xcode_mcp_server.utils.applescript import (
17
17
  )
18
18
 
19
19
 
20
- @mcp.tool()
20
+ @mcp.tool(annotations=TOOL_BUILD)
21
21
  @apply_config
22
22
  def run_project_unmonitored(project_path: str,
23
23
  scheme: Optional[str] = None) -> str:
@@ -7,7 +7,7 @@ import time
7
7
  import datetime
8
8
  from typing import Optional
9
9
 
10
- from xcode_mcp_server.server import mcp
10
+ from xcode_mcp_server.server import mcp, TOOL_BUILD
11
11
  from xcode_mcp_server.config_manager import apply_config
12
12
  from xcode_mcp_server.security import validate_and_normalize_project_path
13
13
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -27,7 +27,7 @@ from xcode_mcp_server.utils.xcresult import (
27
27
  )
28
28
 
29
29
 
30
- @mcp.tool()
30
+ @mcp.tool(annotations=TOOL_BUILD)
31
31
  @apply_config
32
32
  def run_project_until_terminated(project_path: str,
33
33
  scheme: Optional[str] = None,
@@ -7,7 +7,7 @@ import time
7
7
  import datetime
8
8
  from typing import Optional
9
9
 
10
- from xcode_mcp_server.server import mcp
10
+ from xcode_mcp_server.server import mcp, TOOL_BUILD
11
11
  from xcode_mcp_server.config_manager import apply_config
12
12
  from xcode_mcp_server.security import validate_and_normalize_project_path
13
13
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -36,7 +36,7 @@ MAX_INTERACTIVE_RUN_SECONDS = 3600
36
36
  LAUNCH_SETTLE_TIMEOUT = 10
37
37
 
38
38
 
39
- @mcp.tool()
39
+ @mcp.tool(annotations=TOOL_BUILD)
40
40
  @apply_config
41
41
  def run_project_with_user_interaction(project_path: str,
42
42
  scheme: Optional[str] = None,
@@ -4,7 +4,7 @@
4
4
  import json
5
5
  import os
6
6
 
7
- from xcode_mcp_server.server import mcp
7
+ from xcode_mcp_server.server import mcp, TOOL_MUTATING_IDEMPOTENT
8
8
  from xcode_mcp_server.config_manager import apply_config
9
9
  from xcode_mcp_server.security import validate_and_normalize_project_path
10
10
  from xcode_mcp_server.exceptions import InvalidParameterError, XCodeMCPError
@@ -18,7 +18,7 @@ from xcode_mcp_server.utils.applescript import (
18
18
  )
19
19
 
20
20
 
21
- @mcp.tool()
21
+ @mcp.tool(annotations=TOOL_MUTATING_IDEMPOTENT)
22
22
  @apply_config
23
23
  def set_run_destination(
24
24
  project_path: str,
@@ -3,14 +3,14 @@
3
3
 
4
4
  import os
5
5
 
6
- from xcode_mcp_server.server import mcp
6
+ from xcode_mcp_server.server import mcp, TOOL_MUTATING_IDEMPOTENT
7
7
  from xcode_mcp_server.config_manager import apply_config
8
8
  from xcode_mcp_server.security import validate_and_normalize_project_path
9
9
  from xcode_mcp_server.exceptions import InvalidParameterError, XCodeMCPError
10
10
  from xcode_mcp_server.utils.applescript import escape_applescript_string, run_applescript, show_result_notification, show_error_notification
11
11
 
12
12
 
13
- @mcp.tool()
13
+ @mcp.tool(annotations=TOOL_MUTATING_IDEMPOTENT)
14
14
  @apply_config
15
15
  def stop_project(project_path: str) -> str:
16
16
  """
@@ -4,14 +4,14 @@
4
4
  import os
5
5
  import subprocess
6
6
 
7
- from xcode_mcp_server.server import mcp
7
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
8
8
  from xcode_mcp_server.config_manager import apply_config
9
9
  from xcode_mcp_server.exceptions import XCodeMCPError
10
10
  from xcode_mcp_server.utils.applescript import show_result_notification, show_error_notification
11
11
  from xcode_mcp_server.utils.screenshot import _get_all_windows, get_screenshot_path
12
12
 
13
13
 
14
- @mcp.tool()
14
+ @mcp.tool(annotations=TOOL_READONLY)
15
15
  @apply_config
16
16
  def take_app_screenshot(app_name: str) -> str:
17
17
  """
@@ -6,14 +6,14 @@ import sys
6
6
  import subprocess
7
7
  from typing import Optional
8
8
 
9
- from xcode_mcp_server.server import mcp
9
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
10
10
  from xcode_mcp_server.config_manager import apply_config
11
11
  from xcode_mcp_server.exceptions import XCodeMCPError
12
12
  from xcode_mcp_server.utils.applescript import show_result_notification, show_error_notification
13
13
  from xcode_mcp_server.utils.screenshot import _get_booted_simulators, get_screenshot_path
14
14
 
15
15
 
16
- @mcp.tool()
16
+ @mcp.tool(annotations=TOOL_READONLY)
17
17
  @apply_config
18
18
  def take_simulator_screenshot(udid: Optional[str] = None) -> str:
19
19
  """
@@ -4,14 +4,14 @@
4
4
  import os
5
5
  import subprocess
6
6
 
7
- from xcode_mcp_server.server import mcp
7
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
8
8
  from xcode_mcp_server.config_manager import apply_config
9
9
  from xcode_mcp_server.exceptions import XCodeMCPError
10
10
  from xcode_mcp_server.utils.applescript import show_result_notification, show_error_notification
11
11
  from xcode_mcp_server.utils.screenshot import _get_all_windows, get_screenshot_path
12
12
 
13
13
 
14
- @mcp.tool()
14
+ @mcp.tool(annotations=TOOL_READONLY)
15
15
  @apply_config
16
16
  def take_window_screenshot(window_id_or_name: str) -> str:
17
17
  """
@@ -5,7 +5,7 @@ import os
5
5
  import sys
6
6
  import subprocess
7
7
 
8
- from xcode_mcp_server.server import mcp
8
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
9
9
  from xcode_mcp_server.config_manager import apply_config
10
10
  from xcode_mcp_server.security import validate_and_normalize_project_path
11
11
  from xcode_mcp_server.exceptions import XCodeMCPError
@@ -18,7 +18,7 @@ from xcode_mcp_server.utils.applescript import (
18
18
  from xcode_mcp_server.utils.screenshot import get_screenshot_path
19
19
 
20
20
 
21
- @mcp.tool()
21
+ @mcp.tool(annotations=TOOL_READONLY)
22
22
  @apply_config
23
23
  def take_xcode_screenshot(project_path: str) -> str:
24
24
  """
@@ -2,12 +2,12 @@
2
2
  """version tool - Get server version"""
3
3
 
4
4
  from xcode_mcp_server import __version__
5
- from xcode_mcp_server.server import mcp
5
+ from xcode_mcp_server.server import mcp, TOOL_READONLY
6
6
  from xcode_mcp_server.config_manager import apply_config
7
7
  from xcode_mcp_server.utils.applescript import show_result_notification
8
8
 
9
9
 
10
- @mcp.tool()
10
+ @mcp.tool(annotations=TOOL_READONLY)
11
11
  @apply_config
12
12
  def version() -> str:
13
13
  """
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env python3
2
- """FastMCP server instance for Xcode MCP Server"""
3
-
4
- from mcp.server.fastmcp import FastMCP
5
-
6
- # Initialize the MCP server
7
- mcp = FastMCP("Xcode MCP Server",
8
- instructions="""
9
- This server provides access to the Xcode IDE. For any project intended
10
- for Apple platforms, such as iOS or macOS, this MCP server is the best
11
- way to build or run .xcodeproj or .xcworkspace Xcode projects, and should
12
- ALWAYS be preferred over using `xcodebuild`, `swift build`, or
13
- `swift package build`. Building with this tool ensures the build happens
14
- exactly the same way as when the user builds with Xcode, with all the same
15
- settings, so you will get the same results the user sees. The user can also
16
- see any results immediately and a subsequent build and run by the user will
17
- happen almost instantly for the user.
18
-
19
- Call `get_xcode_projects` to find Xcode project (.xcodeproj) and
20
- Xcode workspace (.xcworkspace) folders under a given root folder.
21
-
22
- Call `get_project_schemes` to get the build scheme names for a given
23
- .xcodeproj or .xcworkspace.
24
-
25
- Call `build_project` to build the project and get back the first 25 lines of
26
- error (and/or potentially warning) output. `build_project` will default to the
27
- active scheme if none is provided.
28
- """
29
- )