Changelog

README · Tool reference

What’s new in Xcode 27

Everything below compares Xcode 27 against the previous release, Xcode 26.5. Both schemas were captured from tools/list: tools-26.5.json and tools.json.

Server

  • Added: xcrun mcp-server — headless MCP server that runs without an open workspace, plus durable per-agent/per-folder permissions; see Headless mode
  • Added: xcrun lldb-mcp — a separate MCP server for LLDB; see Agent tooling
  • Changed: mcpbridge connects to the xcode-select Xcode by default (MCP_XCODE_PID/MCP_XCODE_SESSION_ID to override), and reaches the headless Xcode Service.app when headless mode is on
  • Changed: run-agent (which 26.5 already had) gained the skills and plugin subcommands — export Xcode’s skills, or materialize them as an agent plugin; see Agent tooling
  • Changed: tabIdentifier is no longer required on any tool — omit it when only one workspace tab is open. In headless mode it becomes workspaceIdentifier and takes a workspace identifier or an absolute path

Added tools

Changed tools

  • Renamed: ExecuteSnippet → RunCodeSnippet, which gained a required purpose parameter
  • Asset-gated: DocumentationSearch — its results gained a kind field. In 27 the tool is gated on the local com.apple.MobileAsset.AppleDeveloperDocumentation asset, and while the asset is missing the tool is absent from tools/list in both modes. With the asset installed it’s listed normally by both servers
  • Fixed: XcodeMV’s operation is now a plain string enum (move/copy); in 26.5 it was declared as an object with a rawValue field
  • BuildProject: new buildForTesting parameter — also build test targets that a regular build would skip
  • GetBuildLog: line is no longer required on an issue — issues without a line number are now representable
  • RunAllTests / RunSomeTests: output adds xcresultBundlePath for xcresulttool/xccov
  • RenderPreview: new previewCanvasControlOverrides (timeline, toggle, group item) and previewLocalizationOverride parameters; output adds displayName, sourceLineNumber, renderedDestination, supportedCanvasControlOverrides, and supportedLocalizations

Xcode 27.2

The main documentation reflects Xcode 27; this section lists what Xcode 27.2 (27B52, server 25464; RC is 27B48/25463, beta 2 is 27B5028f/25447.1, beta 1 is 27B5019j/25434.2, 27 is 25317) changes on top of it. Captured from tools/list of both servers: tools-27.2.json (windowed) and tools-headless-27.2.json (headless). Both change identically; the windowed/headless split is unchanged from 27. The release’s tools/list is identical to the RC’s.

  • No tools added or removed
  • RenderPreview: new preferredRenderDestination parameter — pick the device or simulator to render on by identifier, platformName, deviceModelName, and/or systemVersion; falls back to the automatic destination with a message in errors when nothing matches. renderedDestination gains a required identifier
  • RenderPreview (RC, breaking): the discovery fields move into one supportedOverrides object — supportedLocalizations → localizations, supportedPreviewVariantOverrides → previewVariants, supportedCanvasControlOverrides → canvasControls, and the beta’s availableRenderDestinations → renderDestinations. previewSnapshotPath becomes snapshot.path
  • RenderPreview (RC): new displayMode parameter — static (default) or interactive, from supportedOverrides.displayModes — and snapshotDelay, seconds an interactive preview runs before the snapshot (≥ 0, less than timeout)
  • RenderPreview (beta 2): canvasControls.groupItems entries are now objects {index, title?} instead of plain integers — title is derived from the #Preview(arguments:) value and may not be unique; pass index as groupItemIndex. errors is now always present in the output
  • AddInfoPlist (RC): new dictionary value type — infoPlistDictionaryItems then takes a JSON-encoded dictionary instead of an array
  • XcodeMakeDir (RC): new directoryKind parameter — folder (default) creates a file system synchronized (buildable) folder, group a classic group backed by a directory; falls back to what the parent supports
  • InvokeDebuggerCommand (beta 2): description now steers toward p/v over po/expression to avoid unnecessary expression evaluation; schema unchanged
  • GetCodeCoverage is announced in the beta 2 release notes (181141715) but still isn’t in the release — absent from tools/list of both servers

Xcode 27.3 beta 1

The main documentation reflects Xcode 27; this section lists what Xcode 27.3 beta 1 (27C5020n, server 25515.6) changes on top of 27.2 (27B52, server 25464). Captured from tools/list of both servers: tools-27.3.json (windowed) and tools-headless-27.3.json (headless). Both change identically; the windowed/headless split is unchanged.

  • No tools added or removed
  • DeviceInteractionStartSession / DeviceInteractionStartWorkspaceSession (breaking): deviceIsSimulator is removed from the output. Descriptions now say simulator instead of device/simulator, and deviceIdentifier matches the UUID/name/OS version/type of the simulator — ECID is dropped. The release notes don’t mention this change
  • DeviceInteractionSynthesize: description now says simulator instead of physical device or simulator, and adds setting the hinge angle in degrees on foldable devices
  • GetTargetBuildSettings: new buildSettingNames parameter — return only the named settings, case-insensitive with * wildcards (e.g. SWIFT_*). Omitted returns all settings, an empty list none. Output adds a required notFound with the names or patterns that matched nothing
  • RenderPreview: output adds producibleOutputsByMode — for each supported display mode, the displayMode name and the outputs it produces; unlisted fields are omitted for that mode
  • RenderPreview, per the release notes, with no schema change: snapshot filenames and metadata include the applied overrides (176531615); interactive delayed snapshots work for macOS previews (181244878); fixed reporting no previews before they finished loading (188424749) and rendering a different preview than the one requested (188817121)
  • GetCodeCoverage is still absent from tools/list of both servers