Skip to content

Conversation

@cameroncooke
Copy link
Collaborator

@cameroncooke cameroncooke commented Dec 15, 2025

Summary

  • Add session defaults opt-out via XCODEBUILDMCP_DISABLE_SESSION_DEFAULTS with legacy schemas exposed while still merging session defaults at runtime; update typed tool factory/env detection for new toggle and clearer validation/error copy
  • Apply session-aware/opt-out schema pattern across device, simulator, macOS, project discovery, logging, UI testing, and utility tools for consistent requirements and hints; clarify session-set-defaults guidance to set shared defaults up front
  • Expand macOS example project with shared scheme + test target and document legacy mode/context-bloat rationale in README

Testing

  • npm test

Note

Introduce env-driven opt-out of session-aware schemas and roll it out across all tools, with updated validation/messages, docs, and example macOS test target.

  • Core/Infra:
    • Add isSessionDefaultsSchemaOptOutEnabled and getSessionAwareToolSchemaShape; update createSessionAwareTool to switch schemas and adjust errors when XCODEBUILDMCP_DISABLE_SESSION_DEFAULTS is set.
    • Improve validation/error copy and tips for both session-aware and legacy modes.
  • Tools (broad sweep):
    • Device, Simulator, macOS, Logging, Project Discovery, Utilities, and UI Testing tools now expose session-aware public schemas with legacy fallback via the new helper.
    • Requirements/hints standardized (e.g., scheme, project/workspace XOR; simulator/device IDs).
  • Session Management:
    • Refine session-set-defaults description to encourage setting all defaults in one call.
  • Docs:
    • Add README section for "Session-aware opt-out" with config example and context rationale; update TOC.
  • Examples:
    • Expand macOS sample project with a shared test target and scheme.
  • Tests:
    • Add/extend tests for session-aware factory (including opt-out messaging) and session-set-defaults description.

Written by Cursor Bugbot for commit 2086d3c. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

  • New Features

    • Added session-aware mode that streamlines tool usage by remembering parameters (project, workspace, scheme, configuration) across calls, eliminating repetitive configuration
    • Added XCODEBUILDMCP_DISABLE_SESSION_DEFAULTS environment variable to restore per-call parameter requirements when needed
  • Testing

    • Added test infrastructure to the example macOS project with test target and test suite scaffolding
  • Documentation

    • Added "Session-aware opt-out" section in README explaining the default session-aware experience and how to enable explicit parameters for each tool call

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 15, 2025

Walkthrough

Adds an environment-driven opt-out for session-aware tool schemas, a helper to select session-aware or legacy Zod shapes at runtime, message formatting for missing-parameter errors, tests, README updates, and migrates ~40 tool modules to use the new schema selector; also adds an Xcode test target and a stub Swift test.

Changes

Cohort / File(s) Summary
Documentation & Project Configuration
README.md, example_projects/macOS/MCPTest.xcodeproj/project.pbxproj, example_projects/macOS/MCPTest.xcodeproj/xcshareddata/xcschemes/MCPTest.xcscheme, example_projects/macOS/MCPTestTests/MCPTestTests.swift
Added README section describing "Session-aware opt-out" and env var XCODEBUILDMCP_DISABLE_SESSION_DEFAULTS. Added new Xcode test target MCPTestTests, scheme Testables entry, and a stub Swift test file.
Core Infrastructure
src/utils/environment.ts, src/utils/typed-tool-factory.ts, src/utils/__tests__/session-aware-tool-factory.test.ts
New isSessionDefaultsSchemaOptOutEnabled() env helper, getSessionAwareToolSchemaShape() selector, unified formatRequirementError() messaging, and a test verifying opt-out messaging behavior.
Session Management
src/mcp/tools/session-management/session_set_defaults.ts
Updated tool description to emphasize setting all relevant defaults in one call; no logic changes.
Device tools
src/mcp/tools/device/* (build_device,get_device_app_path,install_app_device,launch_app_device,stop_app_device,test_device)
Replaced prior public-schema usage with getSessionAwareToolSchemaShape() and introduced local publicSchemaObject variants; imports adjusted.
Logging tools
src/mcp/tools/logging/* (start_device_log_cap,start_sim_log_cap)
Switched exported schema composition to getSessionAwareToolSchemaShape() with publicSchemaObject and legacy schema.
macOS tools
src/mcp/tools/macos/* (build_macos,build_run_macos,get_mac_app_path,test_macos)
Migrated schemas to use getSessionAwareToolSchemaShape() for session-aware vs legacy selection.
Project discovery
src/mcp/tools/project-discovery/* (list_schemes,show_build_settings)
Updated exported schemas to use the session-aware shape selector.
Simulator management
src/mcp/tools/simulator-management/* (erase_sims,reset_sim_location,set_sim_appearance,set_sim_location,sim_statusbar)
Rewired public schemas to use getSessionAwareToolSchemaShape() with local publicSchemaObject.
Simulator tools
src/mcp/tools/simulator/* (boot_sim,build_run_sim,build_sim,get_sim_app_path,install_app_sim,launch_app_logs_sim,launch_app_sim,record_sim_video,stop_app_sim,test_sim)
Systematically switched exported schemas to getSessionAwareToolSchemaShape() to support opt-out behavior.
UI-testing tools
src/mcp/tools/ui-testing/* (button,describe_ui,gesture,key_press,key_sequence,long_press,screenshot,swipe,tap,touch,type_text)
Updated all UI-testing tools to import and use getSessionAwareToolSchemaShape() instead of exposing publicSchemaObject.shape; tap also tightened error typing/handling.
Utilities
src/mcp/tools/utilities/clean.ts
Migrated clean tool schema to session-aware selector.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Client
  participant Tool as "Tool module"
  participant Factory as "typed-tool-factory\n(getSessionAwareToolSchemaShape)"
  participant Env as "environment\nenv helper"
  participant Zod as "Zod schema (session/legacy)"
  Client->>Tool: invoke tool with params
  Tool->>Factory: request schema for tool
  Factory->>Env: check XCODEBUILDMCP_DISABLE_SESSION_DEFAULTS
  Env-->>Factory: opt-out flag (true/false)
  alt opt-out disabled
    Factory->>Zod: return session-aware combined shape
  else opt-out enabled
    Factory->>Zod: return legacy full shape
  end
  Factory-->>Tool: schema shape
  Tool->>Zod: validate params
  alt validation fails
    Zod-->>Tool: validation errors
    Tool->>Client: formatted error (may include session-defaults tip)
  else validation passes
    Zod-->>Tool: validated params
    Tool->>Client: execute handler and return result
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Focus review on:
    • src/utils/typed-tool-factory.ts — correctness of opt-out branching, shape merging/selection, and error message composition.
    • src/utils/environment.ts — normalization and truthy-string handling for env values.
    • Representative migrated tool files (pick 2–3 across device, simulator, ui-testing) to ensure import/shape usage consistency and no accidental logic regressions.
    • src/utils/tests/session-aware-tool-factory.test.ts — environment restore behavior and assertions.

Possibly related PRs

  • PR #135 — overlapping migration of simulator/UI-testing tools to session-aware patterns and typed-tool-factory adjustments.
  • PR #122 — related session-aware schema/handler migration across simulator tools and project-discovery modules.
  • PR #125 — infrastructure migration touching project-discovery and utilities that this PR extends with opt-out handling.

Poem

🐰 I nibble shapes of schema bright,

Session defaults by soft moonlight.
Toggle on or toggle out,
Tools now choose without a doubt.
Hoppy builds and tests take flight!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 27.27% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add legacy session-aware opt-out mode' accurately summarizes the main change: introducing a legacy opt-out toggle for session-aware functionality via the XCODEBUILDMCP_DISABLE_SESSION_DEFAULTS environment variable, which is the core objective of the pull request.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch session-aware-opt-out

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ef92f24 and 2086d3c.

📒 Files selected for processing (1)
  • src/mcp/tools/session-management/__tests__/session_set_defaults.test.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{test,spec}.ts

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{test,spec}.ts: Do not use Vitest mocking APIs in tests (no vi.mock, vi.fn, vi.spyOn, etc.)
In tests, import the core ...Logic function from the tool and use createMockExecutor/createMockFileSystemExecutor to simulate outcomes

Files:

  • src/mcp/tools/session-management/__tests__/session_set_defaults.test.ts
**/*.ts

📄 CodeRabbit inference engine (AGENTS.md)

**/*.ts: Use .ts extensions for all internal relative imports (e.g., import { tool } from './tool.ts')
Use .ts extensions in re-exports for internal files (e.g., export { default } from '../shared/tool.ts')
Use .js extension only for external package entry points (e.g., import ... from '@scope/pkg/file.js')
Never import internal project files using .js extensions

Files:

  • src/mcp/tools/session-management/__tests__/session_set_defaults.test.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (1)
src/mcp/tools/session-management/__tests__/session_set_defaults.test.ts (1)

15-18: Updated description assertion accurately reflects new guidance

The more explicit description about setting all relevant session defaults up front in a single call aligns with the new session-aware behavior and avoids encouraging iterative prompts. Test remains simple, with no Vitest mocking and correct .ts import extensions.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cameroncooke cameroncooke changed the title Document legacy opt-out mode Add legacy session-aware opt-out mode Dec 15, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/utils/environment.ts (1)

70-80: Session-defaults opt-out helper logic looks sound

The normalization and accepted truthy values for XCODEBUILDMCP_DISABLE_SESSION_DEFAULTS match the function name and intended “opt-out enabled” semantics; I don’t see any logic issues here. You may just want to ensure the README’s legacy opt-out section explicitly lists these accepted values so behavior is fully transparent to users.

example_projects/macOS/MCPTest.xcodeproj/project.pbxproj (1)

128-137: Xcode version metadata from beta toolchain.

LastSwiftUpdateCheck = 2600 and CreatedOnToolsVersion = 26.0 indicate this was generated by an Xcode 26 beta. While these metadata values don't affect builds directly, they may cause warnings when opening in released Xcode versions. Consider regenerating the test target with a released Xcode version if compatibility with stable Xcode is desired.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 67dc9f8 and ef92f24.

📒 Files selected for processing (49)
  • README.md (2 hunks)
  • example_projects/macOS/MCPTest.xcodeproj/project.pbxproj (10 hunks)
  • example_projects/macOS/MCPTest.xcodeproj/xcshareddata/xcschemes/MCPTest.xcscheme (1 hunks)
  • example_projects/macOS/MCPTestTests/MCPTestTests.swift (1 hunks)
  • src/mcp/tools/device/build_device.ts (3 hunks)
  • src/mcp/tools/device/get_device_app_path.ts (3 hunks)
  • src/mcp/tools/device/install_app_device.ts (3 hunks)
  • src/mcp/tools/device/launch_app_device.ts (3 hunks)
  • src/mcp/tools/device/stop_app_device.ts (3 hunks)
  • src/mcp/tools/device/test_device.ts (3 hunks)
  • src/mcp/tools/logging/start_device_log_cap.ts (3 hunks)
  • src/mcp/tools/logging/start_sim_log_cap.ts (2 hunks)
  • src/mcp/tools/macos/build_macos.ts (2 hunks)
  • src/mcp/tools/macos/build_run_macos.ts (2 hunks)
  • src/mcp/tools/macos/get_mac_app_path.ts (2 hunks)
  • src/mcp/tools/macos/test_macos.ts (2 hunks)
  • src/mcp/tools/project-discovery/list_schemes.ts (2 hunks)
  • src/mcp/tools/project-discovery/show_build_settings.ts (2 hunks)
  • src/mcp/tools/session-management/session_set_defaults.ts (1 hunks)
  • src/mcp/tools/simulator-management/erase_sims.ts (2 hunks)
  • src/mcp/tools/simulator-management/reset_sim_location.ts (2 hunks)
  • src/mcp/tools/simulator-management/set_sim_appearance.ts (2 hunks)
  • src/mcp/tools/simulator-management/set_sim_location.ts (2 hunks)
  • src/mcp/tools/simulator-management/sim_statusbar.ts (2 hunks)
  • src/mcp/tools/simulator/boot_sim.ts (2 hunks)
  • src/mcp/tools/simulator/build_run_sim.ts (2 hunks)
  • src/mcp/tools/simulator/build_sim.ts (2 hunks)
  • src/mcp/tools/simulator/get_sim_app_path.ts (2 hunks)
  • src/mcp/tools/simulator/install_app_sim.ts (2 hunks)
  • src/mcp/tools/simulator/launch_app_logs_sim.ts (2 hunks)
  • src/mcp/tools/simulator/launch_app_sim.ts (2 hunks)
  • src/mcp/tools/simulator/record_sim_video.ts (2 hunks)
  • src/mcp/tools/simulator/stop_app_sim.ts (2 hunks)
  • src/mcp/tools/simulator/test_sim.ts (2 hunks)
  • src/mcp/tools/ui-testing/button.ts (2 hunks)
  • src/mcp/tools/ui-testing/describe_ui.ts (2 hunks)
  • src/mcp/tools/ui-testing/gesture.ts (2 hunks)
  • src/mcp/tools/ui-testing/key_press.ts (2 hunks)
  • src/mcp/tools/ui-testing/key_sequence.ts (2 hunks)
  • src/mcp/tools/ui-testing/long_press.ts (2 hunks)
  • src/mcp/tools/ui-testing/screenshot.ts (2 hunks)
  • src/mcp/tools/ui-testing/swipe.ts (2 hunks)
  • src/mcp/tools/ui-testing/tap.ts (4 hunks)
  • src/mcp/tools/ui-testing/touch.ts (2 hunks)
  • src/mcp/tools/ui-testing/type_text.ts (2 hunks)
  • src/mcp/tools/utilities/clean.ts (2 hunks)
  • src/utils/__tests__/session-aware-tool-factory.test.ts (1 hunks)
  • src/utils/environment.ts (1 hunks)
  • src/utils/typed-tool-factory.ts (5 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.ts

📄 CodeRabbit inference engine (AGENTS.md)

**/*.ts: Use .ts extensions for all internal relative imports (e.g., import { tool } from './tool.ts')
Use .ts extensions in re-exports for internal files (e.g., export { default } from '../shared/tool.ts')
Use .js extension only for external package entry points (e.g., import ... from '@scope/pkg/file.js')
Never import internal project files using .js extensions

Files:

  • src/mcp/tools/ui-testing/describe_ui.ts
  • src/mcp/tools/macos/build_run_macos.ts
  • src/mcp/tools/simulator/test_sim.ts
  • src/mcp/tools/simulator-management/set_sim_appearance.ts
  • src/utils/__tests__/session-aware-tool-factory.test.ts
  • src/mcp/tools/simulator/build_run_sim.ts
  • src/mcp/tools/utilities/clean.ts
  • src/mcp/tools/ui-testing/button.ts
  • src/mcp/tools/simulator-management/sim_statusbar.ts
  • src/mcp/tools/device/get_device_app_path.ts
  • src/mcp/tools/project-discovery/list_schemes.ts
  • src/mcp/tools/simulator-management/erase_sims.ts
  • src/mcp/tools/simulator-management/set_sim_location.ts
  • src/utils/typed-tool-factory.ts
  • src/mcp/tools/ui-testing/screenshot.ts
  • src/mcp/tools/simulator/build_sim.ts
  • src/mcp/tools/ui-testing/key_press.ts
  • src/mcp/tools/macos/get_mac_app_path.ts
  • src/mcp/tools/simulator/record_sim_video.ts
  • src/mcp/tools/ui-testing/key_sequence.ts
  • src/mcp/tools/ui-testing/long_press.ts
  • src/mcp/tools/simulator/launch_app_sim.ts
  • src/mcp/tools/macos/test_macos.ts
  • src/utils/environment.ts
  • src/mcp/tools/device/install_app_device.ts
  • src/mcp/tools/logging/start_sim_log_cap.ts
  • src/mcp/tools/ui-testing/type_text.ts
  • src/mcp/tools/simulator/stop_app_sim.ts
  • src/mcp/tools/ui-testing/swipe.ts
  • src/mcp/tools/project-discovery/show_build_settings.ts
  • src/mcp/tools/simulator/install_app_sim.ts
  • src/mcp/tools/device/launch_app_device.ts
  • src/mcp/tools/ui-testing/gesture.ts
  • src/mcp/tools/ui-testing/touch.ts
  • src/mcp/tools/ui-testing/tap.ts
  • src/mcp/tools/device/stop_app_device.ts
  • src/mcp/tools/simulator-management/reset_sim_location.ts
  • src/mcp/tools/simulator/get_sim_app_path.ts
  • src/mcp/tools/macos/build_macos.ts
  • src/mcp/tools/device/test_device.ts
  • src/mcp/tools/simulator/launch_app_logs_sim.ts
  • src/mcp/tools/logging/start_device_log_cap.ts
  • src/mcp/tools/simulator/boot_sim.ts
  • src/mcp/tools/session-management/session_set_defaults.ts
  • src/mcp/tools/device/build_device.ts
**/*.{test,spec}.ts

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{test,spec}.ts: Do not use Vitest mocking APIs in tests (no vi.mock, vi.fn, vi.spyOn, etc.)
In tests, import the core ...Logic function from the tool and use createMockExecutor/createMockFileSystemExecutor to simulate outcomes

Files:

  • src/utils/__tests__/session-aware-tool-factory.test.ts
🧠 Learnings (3)
📚 Learning: 2025-09-21T19:27:22.795Z
Learnt from: CR
Repo: cameroncooke/XcodeBuildMCP PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-09-21T19:27:22.795Z
Learning: Applies to **/*.{test,spec}.ts : In tests, import the core ...Logic function from the tool and use createMockExecutor/createMockFileSystemExecutor to simulate outcomes

Applied to files:

  • src/mcp/tools/macos/build_run_macos.ts
  • src/mcp/tools/simulator/test_sim.ts
  • src/utils/__tests__/session-aware-tool-factory.test.ts
  • src/mcp/tools/simulator/build_run_sim.ts
  • src/mcp/tools/utilities/clean.ts
  • src/mcp/tools/device/get_device_app_path.ts
  • src/mcp/tools/project-discovery/list_schemes.ts
  • src/mcp/tools/simulator-management/erase_sims.ts
  • src/mcp/tools/simulator-management/set_sim_location.ts
  • src/utils/typed-tool-factory.ts
  • src/mcp/tools/ui-testing/screenshot.ts
  • src/mcp/tools/simulator/build_sim.ts
  • src/mcp/tools/macos/get_mac_app_path.ts
  • src/mcp/tools/simulator/record_sim_video.ts
  • src/mcp/tools/simulator/launch_app_sim.ts
  • src/mcp/tools/macos/test_macos.ts
  • src/mcp/tools/device/install_app_device.ts
  • src/mcp/tools/logging/start_sim_log_cap.ts
  • src/mcp/tools/ui-testing/type_text.ts
  • src/mcp/tools/simulator/stop_app_sim.ts
  • src/mcp/tools/project-discovery/show_build_settings.ts
  • src/mcp/tools/simulator/install_app_sim.ts
  • src/mcp/tools/device/launch_app_device.ts
  • src/mcp/tools/ui-testing/touch.ts
  • src/mcp/tools/device/stop_app_device.ts
  • src/mcp/tools/simulator-management/reset_sim_location.ts
  • src/mcp/tools/simulator/get_sim_app_path.ts
  • src/mcp/tools/macos/build_macos.ts
  • src/mcp/tools/device/test_device.ts
  • src/mcp/tools/simulator/launch_app_logs_sim.ts
  • src/mcp/tools/logging/start_device_log_cap.ts
  • src/mcp/tools/simulator/boot_sim.ts
  • src/mcp/tools/device/build_device.ts
📚 Learning: 2025-09-21T19:27:22.795Z
Learnt from: CR
Repo: cameroncooke/XcodeBuildMCP PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-09-21T19:27:22.795Z
Learning: Applies to **/*.ts : Use .ts extensions in re-exports for internal files (e.g., export { default } from '../shared/tool.ts')

Applied to files:

  • src/mcp/tools/ui-testing/touch.ts
  • src/mcp/tools/device/test_device.ts
📚 Learning: 2025-09-21T19:27:22.795Z
Learnt from: CR
Repo: cameroncooke/XcodeBuildMCP PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-09-21T19:27:22.795Z
Learning: Applies to **/*.ts : Use .ts extensions for all internal relative imports (e.g., import { tool } from './tool.ts')

Applied to files:

  • src/mcp/tools/ui-testing/touch.ts
🧬 Code graph analysis (42)
src/mcp/tools/ui-testing/describe_ui.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/macos/build_run_macos.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/test_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator-management/set_sim_appearance.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/build_run_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/utilities/clean.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/button.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator-management/sim_statusbar.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/device/get_device_app_path.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/project-discovery/list_schemes.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator-management/erase_sims.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator-management/set_sim_location.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/utils/typed-tool-factory.ts (2)
src/utils/environment.ts (1)
  • isSessionDefaultsSchemaOptOutEnabled (74-80)
src/utils/errors.ts (1)
  • createErrorResponse (111-122)
src/mcp/tools/ui-testing/screenshot.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/build_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/key_press.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/macos/get_mac_app_path.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/record_sim_video.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/key_sequence.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/long_press.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/launch_app_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/macos/test_macos.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/device/install_app_device.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/logging/start_sim_log_cap.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/type_text.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/stop_app_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/swipe.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/project-discovery/show_build_settings.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/install_app_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/device/launch_app_device.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/gesture.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/touch.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/ui-testing/tap.ts (2)
src/utils/logger.ts (1)
  • log (142-162)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/device/stop_app_device.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator-management/reset_sim_location.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/get_sim_app_path.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/macos/build_macos.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/device/test_device.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/launch_app_logs_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/logging/start_device_log_cap.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/simulator/boot_sim.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
src/mcp/tools/device/build_device.ts (1)
src/utils/typed-tool-factory.ts (1)
  • getSessionAwareToolSchemaShape (89-94)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (77)
src/mcp/tools/session-management/session_set_defaults.ts (1)

51-56: Updated tool description is clear and consistent with schema behavior

The new description accurately reflects how this tool is used, encourages batching defaults in a single call, and the example keys match the defined schema. No changes needed.

src/mcp/tools/utilities/clean.ts (2)

9-12: LGTM!

The import correctly uses .ts extension for internal imports and properly imports both createSessionAwareTool and getSessionAwareToolSchemaShape from the typed-tool-factory module.


162-165: LGTM!

The schema is correctly updated to use getSessionAwareToolSchemaShape, passing publicSchemaObject (which omits session-managed fields like projectPath, workspacePath, scheme, configuration) as the session-aware schema, and baseSchemaObject (full schema) as the legacy fallback. This aligns with the PR's session-aware opt-out pattern.

example_projects/macOS/MCPTestTests/MCPTestTests.swift (1)

10-15: Test scaffolding looks good.

The Swift Testing framework setup is correct. The placeholder test method is appropriate for establishing the test target infrastructure. Consider adding actual test cases when functionality is ready to be tested.

src/mcp/tools/ui-testing/touch.ts (2)

20-23: LGTM!

Import correctly updated to include getSessionAwareToolSchemaShape with proper .ts extension for internal imports.


119-122: LGTM!

Schema correctly updated to use getSessionAwareToolSchemaShape with publicSchemaObject (omits simulatorId) as the session-aware schema and touchSchema (full schema) as the legacy fallback. This follows the established pattern across the codebase.

src/mcp/tools/ui-testing/key_sequence.ts (2)

24-27: LGTM!

Import correctly updated with .ts extension, following coding guidelines for internal imports.


98-101: LGTM!

Schema correctly updated to use getSessionAwareToolSchemaShape, consistent with the pattern applied across other UI testing tools in this PR.

example_projects/macOS/MCPTest.xcodeproj/xcshareddata/xcschemes/MCPTest.xcscheme (1)

32-44: LGTM!

The Testables block correctly wires the new MCPTestTests target into the scheme's TestAction. The configuration is appropriate with parallelizable="YES" for efficient test execution and skipped="NO" to include tests in the default test run.

src/utils/typed-tool-factory.ts (6)

17-17: LGTM!

Import correctly uses .ts extension for the internal environment.ts module.


75-87: Clean error formatting abstraction.

The formatRequirementError helper nicely centralizes the logic for generating context-aware error messages. When opt-out is enabled, it shows generic "Missing required parameters" without session-specific hints; otherwise, it includes the helpful setHint for guiding users to set session defaults.


89-94: LGTM!

The getSessionAwareToolSchemaShape helper is well-designed with proper generic constraints. It cleanly encapsulates the schema selection logic: returning the legacy schema's shape when opt-out is enabled, and the session-aware schema's shape otherwise. This enables consistent behavior across 40+ tool files.


157-165: LGTM!

The allOf requirement error handling now correctly uses formatRequirementError to produce context-appropriate error messages based on the opt-out state.


174-179: LGTM!

The oneOf requirement error handling is consistently updated to use the same formatRequirementError pattern.


193-198: LGTM!

The ZodError handling correctly suppresses the session defaults tip when opt-out is enabled, providing cleaner error messages in legacy mode.

src/mcp/tools/ui-testing/type_text.ts (1)

20-23: type_text schema correctly integrated with the session-aware helper

The new import and use of getSessionAwareToolSchemaShape({ sessionAware: publicSchemaObject, legacy: typeTextSchema }) keep this tool aligned with the global session-defaults behavior while preserving existing validation via typeTextSchema in the handler. The typed-tool-factory.ts import also respects the internal .ts import guideline.

Also applies to: 91-95

src/mcp/tools/project-discovery/list_schemes.ts (1)

14-17: Session-aware schema wrapper for list_schemes is consistent with the unified pattern

Hooking the exported schema through getSessionAwareToolSchemaShape({ sessionAware: publicSchemaObject, legacy: baseSchemaObject }) matches the pattern used elsewhere and should respect the global session-defaults opt-out without changing the existing XOR validations in listSchemesSchema.

Also applies to: 123-126

src/mcp/tools/ui-testing/swipe.ts (1)

19-22: swipe tool’s session-aware schema wiring looks correct

Using getSessionAwareToolSchemaShape with publicSchemaObject (without simulatorId) as the session-aware shape and swipeSchema as the legacy shape cleanly aligns this tool with the session-defaults mechanism while leaving the core swipeLogic and validation behavior intact.

Also applies to: 129-132

src/mcp/tools/simulator/test_sim.ts (1)

17-20: test_sim schema export now follows the shared session-aware pattern

The new getSessionAwareToolSchemaShape({ sessionAware: publicSchemaObject, legacy: baseSchemaObject }) usage mirrors other unified tools and should integrate cleanly with the global opt-out, while existing XOR rules and test_simLogic continue to operate on the full testSimulatorSchema.

Also applies to: 134-137

src/mcp/tools/simulator/stop_app_sim.ts (1)

7-10: stop_app_sim adopts the session-aware schema helper without changing semantics

The schema now routed through getSessionAwareToolSchemaShape correctly treats the simulator identifiers as session-managed fields (via publicSchemaObject) while preserving the full baseSchemaObject for legacy/opt-out mode; the stop logic and XOR validation remain unaffected.

Also applies to: 160-163

src/mcp/tools/ui-testing/long_press.ts (1)

25-28: long_press schema wiring is consistent with other session-aware UI tools

Wrapping publicSchemaObject and longPressSchema with getSessionAwareToolSchemaShape keeps simulator identity session-managed by default while allowing a full legacy schema when opt-out is enabled, without impacting the existing long-press execution logic.

Also applies to: 118-121

src/mcp/tools/simulator-management/sim_statusbar.ts (1)

5-8: sim_statusbar session-aware schema change looks good

The new getSessionAwareToolSchemaShape usage correctly exposes a session-managed variant (without simulatorId) by default while retaining the full simStatusbarSchema for opt-out mode, and the updated import from typed-tool-factory.ts complies with the internal .ts import guideline.

Also applies to: 100-103

src/mcp/tools/ui-testing/describe_ui.ts (2)

13-16: LGTM!

Import correctly adds getSessionAwareToolSchemaShape with proper .ts extension for internal imports.


118-121: LGTM!

Schema correctly configured with publicSchemaObject (omitting simulatorId) as the session-aware schema and describeUiSchema (full schema) as legacy fallback. This aligns with the session-aware opt-out pattern.

src/mcp/tools/macos/test_macos.ts (2)

24-27: LGTM!

Import correctly adds getSessionAwareToolSchemaShape with proper .ts extension.


332-335: LGTM!

Schema correctly pairs publicSchemaObject (omitting projectPath, workspacePath, scheme, configuration) as session-aware with baseSchemaObject (full schema) as legacy. Consistent with the project-wide session-aware schema pattern.

src/mcp/tools/ui-testing/screenshot.ts (2)

16-19: LGTM!

Import correctly adds getSessionAwareToolSchemaShape with proper .ts extension.


149-152: LGTM!

Schema correctly configured with publicSchemaObject (omitting simulatorId) as session-aware and screenshotSchema (full schema) as legacy fallback.

src/mcp/tools/macos/build_run_macos.ts (2)

15-18: LGTM!

Import correctly adds getSessionAwareToolSchemaShape with proper .ts extension.


222-225: LGTM!

Schema correctly pairs publicSchemaObject (omitting projectPath, workspacePath, scheme, configuration, arch) as session-aware with baseSchemaObject (full schema) as legacy. Consistent with the project-wide pattern.

src/mcp/tools/simulator/install_app_sim.ts (2)

7-10: LGTM!

Import correctly adds getSessionAwareToolSchemaShape with proper .ts extension.


102-105: LGTM!

Schema correctly configured with publicSchemaObject (omitting simulatorId) as session-aware and installAppSimSchemaObject (full schema) as legacy fallback.

src/mcp/tools/simulator/boot_sim.ts (2)

6-9: LGTM!

Import correctly adds getSessionAwareToolSchemaShape with proper .ts extension.


74-77: LGTM!

Schema correctly configured with publicSchemaObject (omitting simulatorId) as session-aware and bootSimSchemaObject (full schema) as legacy fallback. Pattern is consistent with other tools in this PR.

src/mcp/tools/project-discovery/show_build_settings.ts (2)

14-17: LGTM!

Import correctly updated to include getSessionAwareToolSchemaShape alongside createSessionAwareTool.


117-120: Session-aware schema correctly applied.

The schema wrapper follows the established pattern. Note that publicSchemaObject omits all fields (projectPath, workspacePath, scheme), resulting in an empty schema for session-aware mode—this appears intentional given that all parameters would be provided via session defaults.

src/mcp/tools/ui-testing/gesture.ts (2)

25-28: LGTM!

Import correctly updated to include getSessionAwareToolSchemaShape.


162-165: Session-aware schema correctly applied.

The wrapper properly provides publicSchemaObject (without simulatorId) for session-aware mode and the full gestureSchema for legacy mode.

src/mcp/tools/ui-testing/tap.ts (4)

13-16: LGTM!

Import correctly updated to include getSessionAwareToolSchemaShape.


92-94: Good improvement to error handling.

Typing error as unknown and extracting the message before logging is proper TypeScript practice. This ensures type safety and consistent error message formatting.


118-121: Session-aware schema correctly applied.

The wrapper properly provides publicSchemaObject (without simulatorId) for session-aware mode and the full tapSchema for legacy mode.


179-179: LGTM!

Consistent with the error handling improvement in the outer function.

src/mcp/tools/ui-testing/key_press.ts (2)

18-21: LGTM!

Import correctly updated to include getSessionAwareToolSchemaShape.


90-93: Session-aware schema correctly applied.

The wrapper properly provides publicSchemaObject (without simulatorId) for session-aware mode and the full keyPressSchema for legacy mode.

example_projects/macOS/MCPTest.xcodeproj/project.pbxproj (1)

375-416: Invalid MACOSX_DEPLOYMENT_TARGET will break builds.

The test target's MACOSX_DEPLOYMENT_TARGET = 26.0 is not a valid macOS version (macOS versions are like 14.x, 15.x). This appears to be auto-generated by an Xcode beta. The main target uses 15.2 which is correct.

Additionally, DEVELOPMENT_TEAM = BR6WD3M6ZD is a hardcoded personal team ID that should be cleared for example projects.

Apply this diff to fix the build configuration:

 		8BCB4E2D2EF00E2600D60AD2 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
-				DEVELOPMENT_TEAM = BR6WD3M6ZD;
+				DEVELOPMENT_TEAM = "";
 				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 26.0;
+				MACOSX_DEPLOYMENT_TARGET = 15.2;
 		8BCB4E2E2EF00E2600D60AD2 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				BUNDLE_LOADER = "$(TEST_HOST)";
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
-				DEVELOPMENT_TEAM = BR6WD3M6ZD;
+				DEVELOPMENT_TEAM = "";
 				GENERATE_INFOPLIST_FILE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 26.0;
+				MACOSX_DEPLOYMENT_TARGET = 15.2;
⛔ Skipped due to learnings
Learnt from: CR
Repo: cameroncooke/XcodeBuildMCP PR: 0
File: example_projects/iOS/.cursor/rules/errors.mdc:0-0
Timestamp: 2025-07-22T19:54:12.588Z
Learning: Please don't fix any code errors unless reported by XcodeBuildMCP server tool responses.
src/utils/__tests__/session-aware-tool-factory.test.ts (1)

101-119: LGTM! Well-structured opt-out test.

The test properly verifies the opt-out behavior by setting the environment variable, asserting the correct error messaging, and cleaning up the environment state in a finally block. Good adherence to testing best practices.

README.md (1)

294-310: LGTM! Clear documentation of the opt-out feature.

The section effectively explains the session-aware default behavior and the rationale (context bloat reduction), provides the opt-out mechanism, and includes a practical configuration example. The guidance is clear and helpful.

src/mcp/tools/macos/build_macos.ts (1)

14-17: LGTM! Consistent session-aware schema integration.

The changes properly integrate the session-aware wrapper using the standard pattern, with correct import extensions and appropriate schema composition.

Also applies to: 104-107

src/mcp/tools/logging/start_sim_log_cap.ts (1)

11-14: LGTM! Consistent session-aware schema integration.

The schema wrapper implementation follows the established pattern correctly, enabling session-aware behavior with proper fallback to legacy schema.

Also applies to: 67-70

src/mcp/tools/simulator-management/reset_sim_location.ts (1)

5-8: LGTM! Consistent session-aware schema integration.

The implementation correctly adopts the session-aware schema wrapper pattern with appropriate schema composition.

Also applies to: 98-101

src/mcp/tools/simulator-management/set_sim_location.ts (1)

5-8: LGTM! Consistent session-aware schema integration.

The changes properly integrate the session-aware wrapper following the established pattern.

Also applies to: 126-129

src/mcp/tools/simulator/record_sim_video.ts (1)

18-21: LGTM! Consistent session-aware schema integration.

The schema wrapper implementation correctly follows the project-wide pattern for session-aware tooling.

Also applies to: 229-232

src/mcp/tools/simulator-management/erase_sims.ts (1)

5-8: LGTM! Consistent session-aware schema integration.

The implementation properly adopts the session-aware schema wrapper, completing the consistent pattern across all reviewed tool files.

Also applies to: 89-92

src/mcp/tools/ui-testing/button.ts (1)

13-16: LGTM!

The session-aware schema integration is correctly implemented. The import uses .ts extension per coding guidelines, and the schema composition correctly maps publicSchemaObject (omitting simulatorId) for session-aware mode and the full buttonSchema for legacy mode.

Also applies to: 85-88

src/mcp/tools/macos/get_mac_app_path.ts (1)

13-16: LGTM!

The session-aware schema wrapper is correctly integrated. The publicSchemaObject appropriately omits session-managed fields (projectPath, workspacePath, scheme, configuration, arch), while the legacy mode exposes the full baseSchemaObject.

Also applies to: 194-197

src/mcp/tools/simulator/build_run_sim.ts (1)

13-16: LGTM!

The session-aware schema integration correctly exposes only non-session-managed fields (derivedDataPath, extraArgs, preferXcodebuild) in session-aware mode, while legacy mode retains the full schema including project paths and simulator identifiers.

Also applies to: 509-512

src/mcp/tools/device/build_device.ts (1)

13-16: LGTM!

The newly introduced publicSchemaObject and session-aware schema wrapper follow the established pattern. The public schema correctly omits session-managed fields while preserving optional build parameters (derivedDataPath, extraArgs, preferXcodebuild).

Also applies to: 42-47, 77-80

src/mcp/tools/simulator-management/set_sim_appearance.ts (1)

5-8: LGTM!

The session-aware schema wrapper is correctly applied. The publicSchemaObject exposes only the mode parameter in session-aware mode (since simulatorId comes from session defaults), while legacy mode exposes the complete schema.

Also applies to: 98-101

src/mcp/tools/simulator/build_sim.ts (2)

15-18: LGTM!

The import correctly includes getSessionAwareToolSchemaShape alongside createSessionAwareTool, and uses the .ts extension as per coding guidelines.


156-159: LGTM!

The schema property now correctly uses the session-aware wrapper, allowing dynamic schema selection between the reduced publicSchemaObject (session-aware mode) and full baseSchemaObject (legacy mode) based on the environment configuration.

src/mcp/tools/simulator/launch_app_sim.ts (2)

7-10: LGTM!

Import correctly updated with .ts extension and includes both createSessionAwareTool and getSessionAwareToolSchemaShape.


206-209: LGTM!

The session-aware schema wrapper is correctly applied, maintaining consistency with the pattern used across other tool files.

src/mcp/tools/simulator/launch_app_logs_sim.ts (2)

7-10: LGTM!

Import correctly structured with .ts extension.


73-76: LGTM!

Session-aware schema wrapper correctly applied with publicSchemaObject as the reduced schema and launchAppLogsSimSchemaObject as the legacy full schema.

src/mcp/tools/device/get_device_app_path.ts (3)

14-17: LGTM!

Import correctly updated with .ts extension.


49-54: LGTM!

The publicSchemaObject correctly omits session-managed fields (projectPath, workspacePath, scheme, configuration), leaving only platform as the user-provided parameter in session-aware mode.


160-163: LGTM!

Session-aware schema wrapper correctly applied, enabling dynamic schema selection.

src/mcp/tools/device/install_app_device.ts (3)

13-16: LGTM!

Import correctly structured with .ts extension as per coding guidelines.


29-30: LGTM!

The publicSchemaObject correctly omits only deviceId (the session-managed field), preserving appPath as required user input.


91-94: LGTM!

Session-aware schema wrapper correctly applied.

src/mcp/tools/device/launch_app_device.ts (3)

13-16: LGTM!

Import correctly structured with .ts extension.


38-39: LGTM!

The publicSchemaObject correctly omits deviceId (session-managed), preserving bundleId as required user input.


150-153: LGTM!

Session-aware schema wrapper correctly applied, completing the consistent pattern across all device tools.

src/mcp/tools/device/stop_app_device.ts (1)

13-16: LGTM! Clean session-aware schema implementation.

The session-aware schema pattern is correctly implemented:

  • publicSchemaObject omits deviceId for session-aware mode
  • getSessionAwareToolSchemaShape dynamically selects between session-aware and legacy schemas based on opt-out flag
  • Maintains backward compatibility while supporting session defaults

Also applies to: 27-27, 93-96

src/mcp/tools/simulator/get_sim_app_path.ts (1)

15-18: LGTM! Consistent session-aware schema integration.

The implementation correctly wraps the existing publicSchemaObject with getSessionAwareToolSchemaShape, maintaining the pattern where session-aware mode omits fields that would be provided via session defaults (projectPath, workspacePath, scheme, simulatorId, simulatorName, configuration, useLatestOS, arch).

Also applies to: 309-312

src/mcp/tools/logging/start_device_log_cap.ts (1)

17-20: LGTM! Session-aware pattern correctly applied.

The changes follow the established pattern:

  • publicSchemaObject omits deviceId for session-aware mode
  • getSessionAwareToolSchemaShape provides runtime schema selection
  • Maintains backward compatibility with legacy mode

Also applies to: 638-638, 687-690

src/mcp/tools/device/test_device.ts (1)

24-27: LGTM! Well-implemented session-aware schema pattern.

The implementation correctly:

  • Creates publicSchemaObject omitting session-provided fields (projectPath, workspacePath, scheme, deviceId, configuration)
  • Uses baseSchemaObject as the legacy schema (before XOR validation)
  • Maintains internal use of testDeviceSchema with full validation in the handler
  • Follows the consistent pattern across all tools in this PR

Also applies to: 64-70, 290-292

@pkg-pr-new
Copy link

pkg-pr-new bot commented Dec 15, 2025

Open in StackBlitz

npm i https://pkg.pr.new/cameroncooke/XcodeBuildMCP/xcodebuildmcp@148

commit: 2086d3c

CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = BR6WD3M6ZD;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 26.0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Example project test target requires non-existent macOS 26

The newly added MCPTestTests test target has MACOSX_DEPLOYMENT_TARGET = 26.0 in both Debug and Release configurations. macOS 26.0 doesn't exist - current macOS versions are around 14-15 (Sonoma/Sequoia). The main app target correctly uses 15.2. This configuration will prevent anyone from building the example project's test target on any real macOS system, as the specified deployment target is invalid.

Additional Locations (1)

Fix in Cursor Fix in Web

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact macOS 26 does exist it's just before your training data cut-off, it was released in July 2025, apple decided to rebrand to use years so in 2025 Apple released macOS 26, in 2026 they will release macOS 27 and so on.

@cameroncooke cameroncooke merged commit 8bed880 into main Dec 15, 2025
7 checks passed
@cameroncooke cameroncooke deleted the session-aware-opt-out branch December 15, 2025 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant