From a3b187c74da1c2dd78171885bb42d662784982b2 Mon Sep 17 00:00:00 2001 From: Cameron Cooke Date: Fri, 27 Mar 2026 17:03:43 +0000 Subject: [PATCH 1/4] Set explicit MCP approval annotations for all tools --- manifests/tools/boot_sim.yaml | 2 ++ manifests/tools/build_device.yaml | 2 ++ manifests/tools/build_macos.yaml | 2 ++ manifests/tools/build_run_device.yaml | 2 ++ manifests/tools/build_run_macos.yaml | 2 ++ manifests/tools/build_run_sim.yaml | 2 ++ manifests/tools/build_sim.yaml | 2 ++ manifests/tools/button.yaml | 2 ++ manifests/tools/clean.yaml | 2 ++ manifests/tools/debug_attach_sim.yaml | 5 ++++ manifests/tools/debug_breakpoint_add.yaml | 5 ++++ manifests/tools/debug_breakpoint_remove.yaml | 5 ++++ manifests/tools/debug_continue.yaml | 5 ++++ manifests/tools/debug_detach.yaml | 5 ++++ manifests/tools/debug_lldb_command.yaml | 5 ++++ manifests/tools/debug_stack.yaml | 5 ++++ manifests/tools/debug_variables.yaml | 5 ++++ manifests/tools/discover_projs.yaml | 2 ++ manifests/tools/doctor.yaml | 2 ++ manifests/tools/erase_sims.yaml | 2 ++ manifests/tools/gesture.yaml | 2 ++ manifests/tools/get_app_bundle_id.yaml | 2 ++ manifests/tools/get_coverage_report.yaml | 2 ++ manifests/tools/get_device_app_path.yaml | 2 ++ manifests/tools/get_file_coverage.yaml | 2 ++ manifests/tools/get_mac_app_path.yaml | 2 ++ manifests/tools/get_mac_bundle_id.yaml | 2 ++ manifests/tools/get_sim_app_path.yaml | 2 ++ manifests/tools/install_app_device.yaml | 2 ++ manifests/tools/install_app_sim.yaml | 2 ++ manifests/tools/key_press.yaml | 2 ++ manifests/tools/key_sequence.yaml | 2 ++ manifests/tools/launch_app_device.yaml | 2 ++ manifests/tools/launch_app_logs_sim.yaml | 2 ++ manifests/tools/launch_app_sim.yaml | 2 ++ manifests/tools/launch_mac_app.yaml | 2 ++ manifests/tools/list_devices.yaml | 2 ++ manifests/tools/list_schemes.yaml | 2 ++ manifests/tools/list_sims.yaml | 2 ++ manifests/tools/long_press.yaml | 2 ++ manifests/tools/manage_workflows.yaml | 5 ++++ manifests/tools/open_sim.yaml | 2 ++ manifests/tools/record_sim_video.yaml | 2 ++ manifests/tools/reset_sim_location.yaml | 2 ++ manifests/tools/scaffold_ios_project.yaml | 2 ++ manifests/tools/scaffold_macos_project.yaml | 2 ++ manifests/tools/screenshot.yaml | 2 ++ manifests/tools/session_clear_defaults.yaml | 4 ++- manifests/tools/session_set_defaults.yaml | 2 ++ manifests/tools/session_show_defaults.yaml | 2 ++ .../tools/session_use_defaults_profile.yaml | 1 + manifests/tools/set_sim_appearance.yaml | 2 ++ manifests/tools/set_sim_location.yaml | 2 ++ manifests/tools/show_build_settings.yaml | 2 ++ manifests/tools/sim_statusbar.yaml | 2 ++ manifests/tools/snapshot_ui.yaml | 2 ++ manifests/tools/start_device_log_cap.yaml | 2 ++ manifests/tools/start_sim_log_cap.yaml | 2 ++ manifests/tools/stop_app_device.yaml | 2 ++ manifests/tools/stop_app_sim.yaml | 2 ++ manifests/tools/stop_device_log_cap.yaml | 2 ++ manifests/tools/stop_mac_app.yaml | 2 ++ manifests/tools/stop_sim_log_cap.yaml | 2 ++ manifests/tools/swift_package_build.yaml | 2 ++ manifests/tools/swift_package_clean.yaml | 2 ++ manifests/tools/swift_package_list.yaml | 2 ++ manifests/tools/swift_package_run.yaml | 2 ++ manifests/tools/swift_package_stop.yaml | 2 ++ manifests/tools/swift_package_test.yaml | 2 ++ manifests/tools/swipe.yaml | 2 ++ manifests/tools/sync_xcode_defaults.yaml | 1 + manifests/tools/tap.yaml | 2 ++ manifests/tools/test_device.yaml | 2 ++ manifests/tools/test_macos.yaml | 2 ++ manifests/tools/test_sim.yaml | 2 ++ manifests/tools/touch.yaml | 2 ++ manifests/tools/type_text.yaml | 2 ++ manifests/tools/xcode_ide_call_tool.yaml | 3 +- manifests/tools/xcode_ide_list_tools.yaml | 2 ++ .../tools/xcode_tools_bridge_disconnect.yaml | 1 + .../tools/xcode_tools_bridge_status.yaml | 2 ++ manifests/tools/xcode_tools_bridge_sync.yaml | 1 + .../manifest/__tests__/load-manifest.test.ts | 24 +++++++++++++++ .../__tests__/registry.integration.test.ts | 18 +++++++++++ .../xcode-tools-bridge/registry.ts | 30 +++++++++++++++---- .../__tests__/e2e-mcp-discovery.test.ts | 18 +++++++++-- 86 files changed, 271 insertions(+), 9 deletions(-) diff --git a/manifests/tools/boot_sim.yaml b/manifests/tools/boot_sim.yaml index f69f65e0..d43d90ce 100644 --- a/manifests/tools/boot_sim.yaml +++ b/manifests/tools/boot_sim.yaml @@ -6,7 +6,9 @@ names: description: Boot iOS simulator for manual/non-build flows. Not required before simulator build-and-run (build_run_sim). annotations: title: Boot Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Open the Simulator app (makes it visible) toolId: open_sim diff --git a/manifests/tools/build_device.yaml b/manifests/tools/build_device.yaml index 3312446a..40e0506b 100644 --- a/manifests/tools/build_device.yaml +++ b/manifests/tools/build_device.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Build Device + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/build_macos.yaml b/manifests/tools/build_macos.yaml index 3f8b030b..fc2d8126 100644 --- a/manifests/tools/build_macos.yaml +++ b/manifests/tools/build_macos.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Build macOS + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/build_run_device.yaml b/manifests/tools/build_run_device.yaml index 01558ec7..67a643f4 100644 --- a/manifests/tools/build_run_device.yaml +++ b/manifests/tools/build_run_device.yaml @@ -8,7 +8,9 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Build Run Device + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Capture device logs toolId: start_device_log_cap diff --git a/manifests/tools/build_run_macos.yaml b/manifests/tools/build_run_macos.yaml index 21022d3e..932b81f4 100644 --- a/manifests/tools/build_run_macos.yaml +++ b/manifests/tools/build_run_macos.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Build Run macOS + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/build_run_sim.yaml b/manifests/tools/build_run_sim.yaml index 8b072f13..bb797480 100644 --- a/manifests/tools/build_run_sim.yaml +++ b/manifests/tools/build_run_sim.yaml @@ -8,7 +8,9 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Build Run Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Capture structured logs (app continues running) toolId: start_sim_log_cap diff --git a/manifests/tools/build_sim.yaml b/manifests/tools/build_sim.yaml index a5989352..0a83cf95 100644 --- a/manifests/tools/build_sim.yaml +++ b/manifests/tools/build_sim.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Build Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/button.yaml b/manifests/tools/button.yaml index b9650569..9767975b 100644 --- a/manifests/tools/button.yaml +++ b/manifests/tools/button.yaml @@ -6,4 +6,6 @@ names: description: Press simulator hardware button. annotations: title: Hardware Button + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/clean.yaml b/manifests/tools/clean.yaml index 010eeb9a..c86ac564 100644 --- a/manifests/tools/clean.yaml +++ b/manifests/tools/clean.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Clean + readOnlyHint: false destructiveHint: true + openWorldHint: false diff --git a/manifests/tools/debug_attach_sim.yaml b/manifests/tools/debug_attach_sim.yaml index bfb3bfe0..4b93de09 100644 --- a/manifests/tools/debug_attach_sim.yaml +++ b/manifests/tools/debug_attach_sim.yaml @@ -6,6 +6,11 @@ names: description: Attach LLDB to sim app. routing: stateful: true +annotations: + title: Debug Attach Sim + readOnlyHint: false + destructiveHint: false + openWorldHint: false nextSteps: - label: Add a breakpoint toolId: debug_breakpoint_add diff --git a/manifests/tools/debug_breakpoint_add.yaml b/manifests/tools/debug_breakpoint_add.yaml index c0cf9597..5709eb4b 100644 --- a/manifests/tools/debug_breakpoint_add.yaml +++ b/manifests/tools/debug_breakpoint_add.yaml @@ -6,3 +6,8 @@ names: description: Add breakpoint. routing: stateful: true +annotations: + title: Debug Breakpoint Add + readOnlyHint: false + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/debug_breakpoint_remove.yaml b/manifests/tools/debug_breakpoint_remove.yaml index d7a2775e..3146ee0b 100644 --- a/manifests/tools/debug_breakpoint_remove.yaml +++ b/manifests/tools/debug_breakpoint_remove.yaml @@ -6,3 +6,8 @@ names: description: Remove breakpoint. routing: stateful: true +annotations: + title: Debug Breakpoint Remove + readOnlyHint: false + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/debug_continue.yaml b/manifests/tools/debug_continue.yaml index 6683cb7b..8dfec01b 100644 --- a/manifests/tools/debug_continue.yaml +++ b/manifests/tools/debug_continue.yaml @@ -6,3 +6,8 @@ names: description: Continue debug session. routing: stateful: true +annotations: + title: Debug Continue + readOnlyHint: false + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/debug_detach.yaml b/manifests/tools/debug_detach.yaml index 44466a99..6f837192 100644 --- a/manifests/tools/debug_detach.yaml +++ b/manifests/tools/debug_detach.yaml @@ -6,3 +6,8 @@ names: description: Detach debugger. routing: stateful: true +annotations: + title: Debug Detach + readOnlyHint: false + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/debug_lldb_command.yaml b/manifests/tools/debug_lldb_command.yaml index 0642b0cb..f42d4c0f 100644 --- a/manifests/tools/debug_lldb_command.yaml +++ b/manifests/tools/debug_lldb_command.yaml @@ -6,3 +6,8 @@ names: description: Run LLDB command. routing: stateful: true +annotations: + title: Debug LLDB Command + readOnlyHint: false + destructiveHint: true + openWorldHint: false diff --git a/manifests/tools/debug_stack.yaml b/manifests/tools/debug_stack.yaml index 8b002069..b667a437 100644 --- a/manifests/tools/debug_stack.yaml +++ b/manifests/tools/debug_stack.yaml @@ -6,3 +6,8 @@ names: description: Get backtrace. routing: stateful: true +annotations: + title: Debug Stack + readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/debug_variables.yaml b/manifests/tools/debug_variables.yaml index 287075f6..d640b33c 100644 --- a/manifests/tools/debug_variables.yaml +++ b/manifests/tools/debug_variables.yaml @@ -6,3 +6,8 @@ names: description: Get frame variables. routing: stateful: true +annotations: + title: Debug Variables + readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/discover_projs.yaml b/manifests/tools/discover_projs.yaml index d8dbe9ec..735af420 100644 --- a/manifests/tools/discover_projs.yaml +++ b/manifests/tools/discover_projs.yaml @@ -7,6 +7,8 @@ description: Scans a directory (defaults to workspace root) to find Xcode projec annotations: title: Discover Projects readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Save discovered project/workspace as session defaults toolId: session_set_defaults diff --git a/manifests/tools/doctor.yaml b/manifests/tools/doctor.yaml index d7e08ed1..93d353d2 100644 --- a/manifests/tools/doctor.yaml +++ b/manifests/tools/doctor.yaml @@ -7,3 +7,5 @@ description: MCP environment info. annotations: title: Doctor readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/erase_sims.yaml b/manifests/tools/erase_sims.yaml index 4ecd376d..5b426a28 100644 --- a/manifests/tools/erase_sims.yaml +++ b/manifests/tools/erase_sims.yaml @@ -6,4 +6,6 @@ names: description: Erase simulator. annotations: title: Erase Simulators + readOnlyHint: false destructiveHint: true + openWorldHint: false diff --git a/manifests/tools/gesture.yaml b/manifests/tools/gesture.yaml index 90ab5aff..c25eb5ff 100644 --- a/manifests/tools/gesture.yaml +++ b/manifests/tools/gesture.yaml @@ -6,4 +6,6 @@ names: description: Simulator gesture preset. annotations: title: Gesture + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/get_app_bundle_id.yaml b/manifests/tools/get_app_bundle_id.yaml index 0ffa51a9..2bbe327b 100644 --- a/manifests/tools/get_app_bundle_id.yaml +++ b/manifests/tools/get_app_bundle_id.yaml @@ -7,6 +7,8 @@ description: Extract bundle id from .app. annotations: title: Get App Bundle ID readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Install on simulator toolId: install_app_sim diff --git a/manifests/tools/get_coverage_report.yaml b/manifests/tools/get_coverage_report.yaml index e126ef07..6eadcec0 100644 --- a/manifests/tools/get_coverage_report.yaml +++ b/manifests/tools/get_coverage_report.yaml @@ -7,6 +7,8 @@ description: Show per-target code coverage from an xcresult bundle. annotations: title: Get Coverage Report readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: View file-level coverage toolId: get_file_coverage diff --git a/manifests/tools/get_device_app_path.yaml b/manifests/tools/get_device_app_path.yaml index d60989fd..8d786924 100644 --- a/manifests/tools/get_device_app_path.yaml +++ b/manifests/tools/get_device_app_path.yaml @@ -7,6 +7,8 @@ description: Get device built app path. annotations: title: Get Device App Path readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Get bundle ID toolId: get_app_bundle_id diff --git a/manifests/tools/get_file_coverage.yaml b/manifests/tools/get_file_coverage.yaml index d6eb1be7..90ce1cfc 100644 --- a/manifests/tools/get_file_coverage.yaml +++ b/manifests/tools/get_file_coverage.yaml @@ -7,6 +7,8 @@ description: Show function-level coverage and uncovered line ranges for a specif annotations: title: Get File Coverage readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: View overall coverage toolId: get_coverage_report diff --git a/manifests/tools/get_mac_app_path.yaml b/manifests/tools/get_mac_app_path.yaml index 70d4f532..7599a4c1 100644 --- a/manifests/tools/get_mac_app_path.yaml +++ b/manifests/tools/get_mac_app_path.yaml @@ -7,6 +7,8 @@ description: Get macOS built app path. annotations: title: Get macOS App Path readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Get bundle ID toolId: get_mac_bundle_id diff --git a/manifests/tools/get_mac_bundle_id.yaml b/manifests/tools/get_mac_bundle_id.yaml index 476dd82e..f9684734 100644 --- a/manifests/tools/get_mac_bundle_id.yaml +++ b/manifests/tools/get_mac_bundle_id.yaml @@ -7,6 +7,8 @@ description: Extract bundle id from macOS .app. annotations: title: Get Mac Bundle ID readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Launch the app toolId: launch_mac_app diff --git a/manifests/tools/get_sim_app_path.yaml b/manifests/tools/get_sim_app_path.yaml index 71970d4a..7199eaff 100644 --- a/manifests/tools/get_sim_app_path.yaml +++ b/manifests/tools/get_sim_app_path.yaml @@ -7,6 +7,8 @@ description: Get sim built app path. annotations: title: Get Simulator App Path readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Get bundle ID toolId: get_app_bundle_id diff --git a/manifests/tools/install_app_device.yaml b/manifests/tools/install_app_device.yaml index 6f55b031..4712894c 100644 --- a/manifests/tools/install_app_device.yaml +++ b/manifests/tools/install_app_device.yaml @@ -6,4 +6,6 @@ names: description: Install app on device. annotations: title: Install App Device + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/install_app_sim.yaml b/manifests/tools/install_app_sim.yaml index d0b7f262..2e61517e 100644 --- a/manifests/tools/install_app_sim.yaml +++ b/manifests/tools/install_app_sim.yaml @@ -6,7 +6,9 @@ names: description: Install app on sim. annotations: title: Install App Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Open the Simulator app toolId: open_sim diff --git a/manifests/tools/key_press.yaml b/manifests/tools/key_press.yaml index 7f9e2422..4505a651 100644 --- a/manifests/tools/key_press.yaml +++ b/manifests/tools/key_press.yaml @@ -6,4 +6,6 @@ names: description: Press key by keycode. annotations: title: Key Press + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/key_sequence.yaml b/manifests/tools/key_sequence.yaml index bb5232c0..ab2a4b07 100644 --- a/manifests/tools/key_sequence.yaml +++ b/manifests/tools/key_sequence.yaml @@ -6,4 +6,6 @@ names: description: Press a sequence of keys by their keycodes. annotations: title: Key Sequence + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/launch_app_device.yaml b/manifests/tools/launch_app_device.yaml index a2104651..ef3f123e 100644 --- a/manifests/tools/launch_app_device.yaml +++ b/manifests/tools/launch_app_device.yaml @@ -6,7 +6,9 @@ names: description: Launch app on device. annotations: title: Launch App Device + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Stop the app toolId: stop_app_device diff --git a/manifests/tools/launch_app_logs_sim.yaml b/manifests/tools/launch_app_logs_sim.yaml index 60ac77ab..fa349c84 100644 --- a/manifests/tools/launch_app_logs_sim.yaml +++ b/manifests/tools/launch_app_logs_sim.yaml @@ -8,7 +8,9 @@ routing: stateful: true annotations: title: Launch App Logs Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Stop capture and retrieve logs toolId: stop_sim_log_cap diff --git a/manifests/tools/launch_app_sim.yaml b/manifests/tools/launch_app_sim.yaml index 62d16ac2..dfa2e104 100644 --- a/manifests/tools/launch_app_sim.yaml +++ b/manifests/tools/launch_app_sim.yaml @@ -6,7 +6,9 @@ names: description: Launch app on simulator. annotations: title: Launch App Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Open Simulator app to see it toolId: open_sim diff --git a/manifests/tools/launch_mac_app.yaml b/manifests/tools/launch_mac_app.yaml index 635de75d..3266e621 100644 --- a/manifests/tools/launch_mac_app.yaml +++ b/manifests/tools/launch_mac_app.yaml @@ -6,4 +6,6 @@ names: description: Launch macOS app. annotations: title: Launch macOS App + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/list_devices.yaml b/manifests/tools/list_devices.yaml index 37a90974..a8db4f43 100644 --- a/manifests/tools/list_devices.yaml +++ b/manifests/tools/list_devices.yaml @@ -7,6 +7,8 @@ description: List connected devices. annotations: title: List Devices readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Build for device toolId: build_device diff --git a/manifests/tools/list_schemes.yaml b/manifests/tools/list_schemes.yaml index 3cc2f911..27dd2f10 100644 --- a/manifests/tools/list_schemes.yaml +++ b/manifests/tools/list_schemes.yaml @@ -7,6 +7,8 @@ description: List Xcode schemes. annotations: title: List Schemes readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Build for macOS toolId: build_macos diff --git a/manifests/tools/list_sims.yaml b/manifests/tools/list_sims.yaml index 32d171c8..a1309932 100644 --- a/manifests/tools/list_sims.yaml +++ b/manifests/tools/list_sims.yaml @@ -7,6 +7,8 @@ description: List iOS simulators. annotations: title: List Simulators readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Boot a simulator toolId: boot_sim diff --git a/manifests/tools/long_press.yaml b/manifests/tools/long_press.yaml index c4049ab0..df25d650 100644 --- a/manifests/tools/long_press.yaml +++ b/manifests/tools/long_press.yaml @@ -6,4 +6,6 @@ names: description: Long press at coords. annotations: title: Long Press + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/manage_workflows.yaml b/manifests/tools/manage_workflows.yaml index 4f83dce4..73fae306 100644 --- a/manifests/tools/manage_workflows.yaml +++ b/manifests/tools/manage_workflows.yaml @@ -6,3 +6,8 @@ names: description: Workflows are groups of tools exposed by XcodeBuildMCP. By default, not all workflows (and therefore tools) are enabled; only simulator tools are enabled by default. Some workflows are mandatory and can't be disabled. availability: cli: true +annotations: + title: Manage Workflows + readOnlyHint: false + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/open_sim.yaml b/manifests/tools/open_sim.yaml index a80f6bf8..fad36b58 100644 --- a/manifests/tools/open_sim.yaml +++ b/manifests/tools/open_sim.yaml @@ -6,7 +6,9 @@ names: description: Open Simulator.app for visibility/manual workflows. Not required before simulator build-and-run (build_run_sim). annotations: title: Open Simulator + readOnlyHint: true destructiveHint: false + openWorldHint: false nextSteps: - label: Boot a simulator for manual workflows toolId: boot_sim diff --git a/manifests/tools/record_sim_video.yaml b/manifests/tools/record_sim_video.yaml index be500983..da927fbc 100644 --- a/manifests/tools/record_sim_video.yaml +++ b/manifests/tools/record_sim_video.yaml @@ -8,7 +8,9 @@ routing: stateful: true annotations: title: Record Simulator Video + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Stop and save the recording toolId: record_sim_video diff --git a/manifests/tools/reset_sim_location.yaml b/manifests/tools/reset_sim_location.yaml index d33af831..da77be53 100644 --- a/manifests/tools/reset_sim_location.yaml +++ b/manifests/tools/reset_sim_location.yaml @@ -6,4 +6,6 @@ names: description: Reset sim location. annotations: title: Reset Simulator Location + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/scaffold_ios_project.yaml b/manifests/tools/scaffold_ios_project.yaml index cc092b81..fd361656 100644 --- a/manifests/tools/scaffold_ios_project.yaml +++ b/manifests/tools/scaffold_ios_project.yaml @@ -8,7 +8,9 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Scaffold iOS Project + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: "Important: Before working on the project make sure to read the README.md file in the workspace root directory." - label: Build for simulator diff --git a/manifests/tools/scaffold_macos_project.yaml b/manifests/tools/scaffold_macos_project.yaml index 8c82fdc4..36ad8f45 100644 --- a/manifests/tools/scaffold_macos_project.yaml +++ b/manifests/tools/scaffold_macos_project.yaml @@ -8,7 +8,9 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Scaffold macOS Project + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: "Important: Before working on the project make sure to read the README.md file in the workspace root directory." - label: Build for macOS diff --git a/manifests/tools/screenshot.yaml b/manifests/tools/screenshot.yaml index 75dc871a..6ffa2d66 100644 --- a/manifests/tools/screenshot.yaml +++ b/manifests/tools/screenshot.yaml @@ -7,3 +7,5 @@ description: Capture screenshot. annotations: title: Screenshot readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/session_clear_defaults.yaml b/manifests/tools/session_clear_defaults.yaml index 0ce955ee..c04ba49c 100644 --- a/manifests/tools/session_clear_defaults.yaml +++ b/manifests/tools/session_clear_defaults.yaml @@ -6,4 +6,6 @@ names: description: Clear session defaults for the active profile or a specified profile. annotations: title: Clear Session Defaults - destructiveHint: false + readOnlyHint: false + destructiveHint: true + openWorldHint: false diff --git a/manifests/tools/session_set_defaults.yaml b/manifests/tools/session_set_defaults.yaml index 01c0de83..fc044cf0 100644 --- a/manifests/tools/session_set_defaults.yaml +++ b/manifests/tools/session_set_defaults.yaml @@ -6,4 +6,6 @@ names: description: Set session defaults for the active profile, or for a specified profile and make it active. annotations: title: Set Session Defaults + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/session_show_defaults.yaml b/manifests/tools/session_show_defaults.yaml index ff304da9..2779b592 100644 --- a/manifests/tools/session_show_defaults.yaml +++ b/manifests/tools/session_show_defaults.yaml @@ -7,3 +7,5 @@ description: Show current active defaults. Required before your first build/run/ annotations: title: Show Session Defaults readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/session_use_defaults_profile.yaml b/manifests/tools/session_use_defaults_profile.yaml index ac738e5e..4bfd1094 100644 --- a/manifests/tools/session_use_defaults_profile.yaml +++ b/manifests/tools/session_use_defaults_profile.yaml @@ -8,3 +8,4 @@ annotations: title: Use Session Defaults Profile readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/set_sim_appearance.yaml b/manifests/tools/set_sim_appearance.yaml index f3991311..d4bc0bdb 100644 --- a/manifests/tools/set_sim_appearance.yaml +++ b/manifests/tools/set_sim_appearance.yaml @@ -6,4 +6,6 @@ names: description: Set sim appearance. annotations: title: Set Simulator Appearance + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/set_sim_location.yaml b/manifests/tools/set_sim_location.yaml index c2ac5a3f..6cf9a8ff 100644 --- a/manifests/tools/set_sim_location.yaml +++ b/manifests/tools/set_sim_location.yaml @@ -6,4 +6,6 @@ names: description: Set sim location. annotations: title: Set Simulator Location + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/show_build_settings.yaml b/manifests/tools/show_build_settings.yaml index f439c579..c6c3620d 100644 --- a/manifests/tools/show_build_settings.yaml +++ b/manifests/tools/show_build_settings.yaml @@ -9,6 +9,8 @@ predicates: annotations: title: Show Build Settings readOnlyHint: true + destructiveHint: false + openWorldHint: false nextSteps: - label: Build for macOS toolId: build_macos diff --git a/manifests/tools/sim_statusbar.yaml b/manifests/tools/sim_statusbar.yaml index 5aa350e6..0ebf4ab4 100644 --- a/manifests/tools/sim_statusbar.yaml +++ b/manifests/tools/sim_statusbar.yaml @@ -6,4 +6,6 @@ names: description: Set sim status bar network. annotations: title: Simulator Statusbar + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/snapshot_ui.yaml b/manifests/tools/snapshot_ui.yaml index c4db396d..cdac6fd2 100644 --- a/manifests/tools/snapshot_ui.yaml +++ b/manifests/tools/snapshot_ui.yaml @@ -22,3 +22,5 @@ nextSteps: annotations: title: Snapshot UI readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/start_device_log_cap.yaml b/manifests/tools/start_device_log_cap.yaml index 58f6c032..d0e36b00 100644 --- a/manifests/tools/start_device_log_cap.yaml +++ b/manifests/tools/start_device_log_cap.yaml @@ -8,7 +8,9 @@ routing: stateful: true annotations: title: Start Device Log Capture + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Stop capture and retrieve logs toolId: stop_device_log_cap diff --git a/manifests/tools/start_sim_log_cap.yaml b/manifests/tools/start_sim_log_cap.yaml index 20a0ebb0..5d98d889 100644 --- a/manifests/tools/start_sim_log_cap.yaml +++ b/manifests/tools/start_sim_log_cap.yaml @@ -8,7 +8,9 @@ routing: stateful: true annotations: title: Start Simulator Log Capture + readOnlyHint: false destructiveHint: false + openWorldHint: false nextSteps: - label: Stop capture and retrieve logs toolId: stop_sim_log_cap diff --git a/manifests/tools/stop_app_device.yaml b/manifests/tools/stop_app_device.yaml index 487d0b2f..723742ae 100644 --- a/manifests/tools/stop_app_device.yaml +++ b/manifests/tools/stop_app_device.yaml @@ -6,4 +6,6 @@ names: description: Stop device app. annotations: title: Stop App Device + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/stop_app_sim.yaml b/manifests/tools/stop_app_sim.yaml index ba34b0ef..6e1eedb7 100644 --- a/manifests/tools/stop_app_sim.yaml +++ b/manifests/tools/stop_app_sim.yaml @@ -6,4 +6,6 @@ names: description: Stop sim app. annotations: title: Stop App Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/stop_device_log_cap.yaml b/manifests/tools/stop_device_log_cap.yaml index e03f6b22..9cc9fe1f 100644 --- a/manifests/tools/stop_device_log_cap.yaml +++ b/manifests/tools/stop_device_log_cap.yaml @@ -8,4 +8,6 @@ routing: stateful: true annotations: title: Stop Device and Return Logs + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/stop_mac_app.yaml b/manifests/tools/stop_mac_app.yaml index 9efa5969..213bbaac 100644 --- a/manifests/tools/stop_mac_app.yaml +++ b/manifests/tools/stop_mac_app.yaml @@ -6,4 +6,6 @@ names: description: Stop macOS app. annotations: title: Stop macOS App + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/stop_sim_log_cap.yaml b/manifests/tools/stop_sim_log_cap.yaml index 771f0719..2f0382bb 100644 --- a/manifests/tools/stop_sim_log_cap.yaml +++ b/manifests/tools/stop_sim_log_cap.yaml @@ -8,4 +8,6 @@ routing: stateful: true annotations: title: Stop Simulator and Return Logs + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/swift_package_build.yaml b/manifests/tools/swift_package_build.yaml index b9dd1047..43d427b8 100644 --- a/manifests/tools/swift_package_build.yaml +++ b/manifests/tools/swift_package_build.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Swift Package Build + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/swift_package_clean.yaml b/manifests/tools/swift_package_clean.yaml index 4d291324..875bfcac 100644 --- a/manifests/tools/swift_package_clean.yaml +++ b/manifests/tools/swift_package_clean.yaml @@ -6,4 +6,6 @@ names: description: swift package clean. annotations: title: Swift Package Clean + readOnlyHint: false destructiveHint: true + openWorldHint: false diff --git a/manifests/tools/swift_package_list.yaml b/manifests/tools/swift_package_list.yaml index 974a3855..4612b40b 100644 --- a/manifests/tools/swift_package_list.yaml +++ b/manifests/tools/swift_package_list.yaml @@ -9,3 +9,5 @@ routing: annotations: title: Swift Package List readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/swift_package_run.yaml b/manifests/tools/swift_package_run.yaml index d0af2f30..570b480b 100644 --- a/manifests/tools/swift_package_run.yaml +++ b/manifests/tools/swift_package_run.yaml @@ -8,4 +8,6 @@ routing: stateful: true annotations: title: Swift Package Run + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/swift_package_stop.yaml b/manifests/tools/swift_package_stop.yaml index 3723a430..16461c46 100644 --- a/manifests/tools/swift_package_stop.yaml +++ b/manifests/tools/swift_package_stop.yaml @@ -8,4 +8,6 @@ routing: stateful: true annotations: title: Swift Package Stop + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/swift_package_test.yaml b/manifests/tools/swift_package_test.yaml index b1cb8877..869637a9 100644 --- a/manifests/tools/swift_package_test.yaml +++ b/manifests/tools/swift_package_test.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Swift Package Test + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/swipe.yaml b/manifests/tools/swipe.yaml index 34d49bbe..39efe34b 100644 --- a/manifests/tools/swipe.yaml +++ b/manifests/tools/swipe.yaml @@ -6,4 +6,6 @@ names: description: Swipe between points. annotations: title: Swipe + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/sync_xcode_defaults.yaml b/manifests/tools/sync_xcode_defaults.yaml index 06c4d318..22614041 100644 --- a/manifests/tools/sync_xcode_defaults.yaml +++ b/manifests/tools/sync_xcode_defaults.yaml @@ -10,3 +10,4 @@ annotations: title: Sync Xcode Defaults readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/tap.yaml b/manifests/tools/tap.yaml index 3d5229e3..4f908c17 100644 --- a/manifests/tools/tap.yaml +++ b/manifests/tools/tap.yaml @@ -6,4 +6,6 @@ names: description: Tap UI element by accessibility id/label (recommended) or coordinates as fallback. annotations: title: Tap + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/test_device.yaml b/manifests/tools/test_device.yaml index ddcccc2f..6310628d 100644 --- a/manifests/tools/test_device.yaml +++ b/manifests/tools/test_device.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Test Device + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/test_macos.yaml b/manifests/tools/test_macos.yaml index 01477462..bdc2acab 100644 --- a/manifests/tools/test_macos.yaml +++ b/manifests/tools/test_macos.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Test macOS + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/test_sim.yaml b/manifests/tools/test_sim.yaml index 095fb79f..9a9cec4a 100644 --- a/manifests/tools/test_sim.yaml +++ b/manifests/tools/test_sim.yaml @@ -8,4 +8,6 @@ predicates: - hideWhenXcodeAgentMode annotations: title: Test Simulator + readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/touch.yaml b/manifests/tools/touch.yaml index ceb589d0..1daf1930 100644 --- a/manifests/tools/touch.yaml +++ b/manifests/tools/touch.yaml @@ -6,4 +6,6 @@ names: description: Touch down/up at coords. annotations: title: Touch + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/type_text.yaml b/manifests/tools/type_text.yaml index 485940fc..2a6e8d31 100644 --- a/manifests/tools/type_text.yaml +++ b/manifests/tools/type_text.yaml @@ -6,4 +6,6 @@ names: description: Type text. annotations: title: Type Text + readOnlyHint: true destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/xcode_ide_call_tool.yaml b/manifests/tools/xcode_ide_call_tool.yaml index 5996adcc..f6eb6f5e 100644 --- a/manifests/tools/xcode_ide_call_tool.yaml +++ b/manifests/tools/xcode_ide_call_tool.yaml @@ -9,4 +9,5 @@ routing: annotations: title: Call Xcode IDE Tool readOnlyHint: false - destructiveHint: false + destructiveHint: true + openWorldHint: false diff --git a/manifests/tools/xcode_ide_list_tools.yaml b/manifests/tools/xcode_ide_list_tools.yaml index 11e1d1f8..004b8fe4 100644 --- a/manifests/tools/xcode_ide_list_tools.yaml +++ b/manifests/tools/xcode_ide_list_tools.yaml @@ -9,3 +9,5 @@ routing: annotations: title: List Xcode IDE Tools readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/xcode_tools_bridge_disconnect.yaml b/manifests/tools/xcode_tools_bridge_disconnect.yaml index 308aa480..73c08e3c 100644 --- a/manifests/tools/xcode_tools_bridge_disconnect.yaml +++ b/manifests/tools/xcode_tools_bridge_disconnect.yaml @@ -10,3 +10,4 @@ annotations: title: Disconnect Xcode Tools Bridge readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/xcode_tools_bridge_status.yaml b/manifests/tools/xcode_tools_bridge_status.yaml index 7166f140..a6ada5db 100644 --- a/manifests/tools/xcode_tools_bridge_status.yaml +++ b/manifests/tools/xcode_tools_bridge_status.yaml @@ -9,3 +9,5 @@ predicates: annotations: title: Xcode Tools Bridge Status readOnlyHint: true + destructiveHint: false + openWorldHint: false diff --git a/manifests/tools/xcode_tools_bridge_sync.yaml b/manifests/tools/xcode_tools_bridge_sync.yaml index e0f61630..5eccb659 100644 --- a/manifests/tools/xcode_tools_bridge_sync.yaml +++ b/manifests/tools/xcode_tools_bridge_sync.yaml @@ -10,3 +10,4 @@ annotations: title: Sync Xcode Tools Bridge readOnlyHint: false destructiveHint: false + openWorldHint: false diff --git a/src/core/manifest/__tests__/load-manifest.test.ts b/src/core/manifest/__tests__/load-manifest.test.ts index e1810d80..60b2aefa 100644 --- a/src/core/manifest/__tests__/load-manifest.test.ts +++ b/src/core/manifest/__tests__/load-manifest.test.ts @@ -105,6 +105,30 @@ describe('load-manifest', () => { 'debugEnabled', ); }); + + it('should provide explicit approval annotations for every tool', () => { + const manifest = loadManifest(); + + for (const [toolId, tool] of manifest.tools) { + expect(tool.annotations, `Tool '${toolId}' is missing annotations`).toBeDefined(); + expect( + tool.annotations?.title, + `Tool '${toolId}' is missing annotations.title`, + ).toBeTruthy(); + expect( + tool.annotations?.readOnlyHint, + `Tool '${toolId}' is missing annotations.readOnlyHint`, + ).not.toBeUndefined(); + expect( + tool.annotations?.destructiveHint, + `Tool '${toolId}' is missing annotations.destructiveHint`, + ).not.toBeUndefined(); + expect( + tool.annotations?.openWorldHint, + `Tool '${toolId}' is missing annotations.openWorldHint`, + ).not.toBeUndefined(); + } + }); }); describe('getWorkflowTools', () => { diff --git a/src/integrations/xcode-tools-bridge/__tests__/registry.integration.test.ts b/src/integrations/xcode-tools-bridge/__tests__/registry.integration.test.ts index 27d9c1cb..c02ec611 100644 --- a/src/integrations/xcode-tools-bridge/__tests__/registry.integration.test.ts +++ b/src/integrations/xcode-tools-bridge/__tests__/registry.integration.test.ts @@ -97,6 +97,24 @@ describe('XcodeToolsProxyRegistry (stdio integration)', () => { expect(res.content[0]).toMatchObject({ type: 'text', text: 'Alpha:hi' }); }); + it('fills approval annotations for proxied tools when the remote tool omits them', async () => { + const tools = await localClient.listTools(); + const alpha = tools.tools.find((tool) => tool.name === 'xcode_tools_Alpha'); + const beta = tools.tools.find((tool) => tool.name === 'xcode_tools_Beta'); + + expect(alpha?.annotations).toMatchObject({ + title: 'Alpha', + readOnlyHint: true, + destructiveHint: false, + openWorldHint: false, + }); + expect(beta?.annotations).toMatchObject({ + readOnlyHint: false, + destructiveHint: false, + openWorldHint: false, + }); + }); + it('updates registered tools on remote list change', async () => { await localClient.callTool({ name: 'xcode_tools_TriggerChange', arguments: {} }); diff --git a/src/integrations/xcode-tools-bridge/registry.ts b/src/integrations/xcode-tools-bridge/registry.ts index 40bbce1b..4dd98ac4 100644 --- a/src/integrations/xcode-tools-bridge/registry.ts +++ b/src/integrations/xcode-tools-bridge/registry.ts @@ -145,14 +145,15 @@ function buildBestEffortInputSchema(tool: Tool): z.ZodTypeAny { function buildBestEffortAnnotations(tool: Tool, localName: string): ToolAnnotations { const existing = (tool.annotations ?? {}) as ToolAnnotations; - - if (existing.readOnlyHint !== undefined) { - return existing; - } + const readOnlyHint = existing.readOnlyHint ?? inferReadOnlyHint(localName); + const destructiveHint = existing.destructiveHint ?? inferDestructiveHint(localName, readOnlyHint); + const openWorldHint = existing.openWorldHint ?? inferOpenWorldHint(localName); return { ...existing, - readOnlyHint: inferReadOnlyHint(localName), + readOnlyHint, + destructiveHint, + openWorldHint, }; } @@ -175,3 +176,22 @@ function inferReadOnlyHint(localToolName: string): boolean { return false; } + +function inferDestructiveHint(localToolName: string, readOnlyHint: boolean): boolean { + if (readOnlyHint) return false; + + const name = localToolName.toLowerCase(); + const destructivePrefixes = [ + 'xcode_tools_xcodedelete', + 'xcode_tools_xcodeclean', + 'xcode_tools_xcodeerase', + 'xcode_tools_xcoderemove', + ]; + + return destructivePrefixes.some((p) => name.startsWith(p)); +} + +function inferOpenWorldHint(_localToolName: string): boolean { + // Xcode bridge tools are local IDE capabilities, not internet-facing or open-world tools. + return false; +} diff --git a/src/smoke-tests/__tests__/e2e-mcp-discovery.test.ts b/src/smoke-tests/__tests__/e2e-mcp-discovery.test.ts index 5d2304db..99991a47 100644 --- a/src/smoke-tests/__tests__/e2e-mcp-discovery.test.ts +++ b/src/smoke-tests/__tests__/e2e-mcp-discovery.test.ts @@ -150,15 +150,29 @@ describe('MCP Discovery (e2e)', () => { it('tools have annotations where expected', async () => { const result = await harness.client.listTools(); - // build_sim should have destructiveHint annotation + // build_sim should have a complete explicit annotation set const buildSim = result.tools.find((t) => t.name === 'build_sim'); expect(buildSim).toBeDefined(); expect(buildSim!.annotations).toBeDefined(); + expect(buildSim!.annotations?.readOnlyHint).toBe(false); + expect(buildSim!.annotations?.destructiveHint).toBe(false); + expect(buildSim!.annotations?.openWorldHint).toBe(false); - // list_sims should have readOnlyHint annotation + // list_sims should advertise read-only closed-world behavior const listSims = result.tools.find((t) => t.name === 'list_sims'); expect(listSims).toBeDefined(); expect(listSims!.annotations).toBeDefined(); + expect(listSims!.annotations?.readOnlyHint).toBe(true); + expect(listSims!.annotations?.destructiveHint).toBe(false); + expect(listSims!.annotations?.openWorldHint).toBe(false); + + // type_text is modeled as read-only from a host-permissions perspective + const typeText = result.tools.find((t) => t.name === 'type_text'); + expect(typeText).toBeDefined(); + expect(typeText!.annotations).toBeDefined(); + expect(typeText!.annotations?.readOnlyHint).toBe(true); + expect(typeText!.annotations?.destructiveHint).toBe(false); + expect(typeText!.annotations?.openWorldHint).toBe(false); }); it('no duplicate tool names', async () => { From 093b91f14377f079759ac811d4585d6433f40f97 Mon Sep 17 00:00:00 2001 From: Cameron Cooke Date: Fri, 27 Mar 2026 17:17:56 +0000 Subject: [PATCH 2/4] Change readOnlyHint to true in record_sim_video.yaml --- manifests/tools/record_sim_video.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/tools/record_sim_video.yaml b/manifests/tools/record_sim_video.yaml index da927fbc..38538158 100644 --- a/manifests/tools/record_sim_video.yaml +++ b/manifests/tools/record_sim_video.yaml @@ -8,7 +8,7 @@ routing: stateful: true annotations: title: Record Simulator Video - readOnlyHint: false + readOnlyHint: true destructiveHint: false openWorldHint: false nextSteps: From 8a1ae12f9e8c656dacb26852e6b62a0e22aec9d9 Mon Sep 17 00:00:00 2001 From: Cameron Cooke Date: Fri, 27 Mar 2026 17:18:21 +0000 Subject: [PATCH 3/4] Change readOnlyHint from true to false --- manifests/tools/record_sim_video.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/tools/record_sim_video.yaml b/manifests/tools/record_sim_video.yaml index 38538158..da927fbc 100644 --- a/manifests/tools/record_sim_video.yaml +++ b/manifests/tools/record_sim_video.yaml @@ -8,7 +8,7 @@ routing: stateful: true annotations: title: Record Simulator Video - readOnlyHint: true + readOnlyHint: false destructiveHint: false openWorldHint: false nextSteps: From a0c15b4569adfa4626d75bc979cf0fabce491ecc Mon Sep 17 00:00:00 2001 From: Cameron Cooke Date: Fri, 27 Mar 2026 17:18:35 +0000 Subject: [PATCH 4/4] Change readOnlyHint to true in reset_sim_location.yaml --- manifests/tools/reset_sim_location.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/tools/reset_sim_location.yaml b/manifests/tools/reset_sim_location.yaml index da77be53..06f83607 100644 --- a/manifests/tools/reset_sim_location.yaml +++ b/manifests/tools/reset_sim_location.yaml @@ -6,6 +6,6 @@ names: description: Reset sim location. annotations: title: Reset Simulator Location - readOnlyHint: false + readOnlyHint: true destructiveHint: false openWorldHint: false