Skip to main content

update-xcode-mcp

Check a newly installed Xcode (beta, RC, or release) for changes in its MCP server — capture `tools/list` from the windowed and headless servers, diff against the committed schemas, and update tools-*.json, CHANGELOG.md, README.md, and docs/. Use when the user installed a new Xcode build, asks to "check MCP changes", "update docs for Xcode X", or mentions a build number like 27B52.

Source facts

Repository
artemnovichkov/xcode-tools-docs
Last source activity
October 30, 2026 at 13:00
Detected SKILL.md language
English
Stars
77
Forks
3

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
update-xcode-mcp
description
Check a newly installed Xcode (beta, RC, or release) for changes in its MCP server — capture `tools/list` from the windowed and headless servers, diff against the committed schemas, and update tools-*.json, CHANGELOG.md, README.md, and docs/. Use when the user installed a new Xcode build, asks to "check MCP changes", "update docs for Xcode X", or mentions a build number like 27B52.
# Update docs for a new Xcode build Repo documents Xcode's MCP server. Source of truth = raw `tools/list` captures in the root (`tools*.json`); docs describe them. ## 1. Identify the build ```bash xcode-select -p for a in /Applications/Xcode*.app; do echo "$a $(defaults read $a/Contents/version.plist ProductBuildVersion) $(defaults read $a/Contents/Info.plist CFBundleShortVersionString)"; done mdls -name kMDItemWhereFroms ~/Downloads/Xcode_*.xip # URL tells beta / Release_Candidate / release ``` Build suffix letter (e.g. `27B5028f`) = beta; plain (`27B48`, `27B52`) = RC or release — confirm via xip URL or release notes. Ask user if unclear. Use the new Xcode's bridge explicitly: `BRIDGE=/Applications/XcodeN.app/Contents/Developer/usr/bin/mcpbridge` (or `xcrun -f mcpbridge` if it's the selected one). ## 2. Capture schemas Scripts live in `.claude/skills/update-xcode-mcp/scripts/`. Write to the scratchpad first, never straight over committed files. **Headless** (`xcrun mcp-server status` must show `running`/enabled; bridge then launches the new Xcode's `Xcode Service.app`): ```bash python3 -I scripts/capture_tools.py "$BRIDGE" $SCRATCH/headless.json pgrep -lf "Xcode Service" # confirm service path belongs to the new Xcode ``` **Windowed** — open a project in the new Xcode, target it by PID: ```bash open -a /Applications/XcodeN.app ~/Developer/TaskExample/TaskExample.xcodeproj P=$(pgrep -f "^/Applications/XcodeN.app/Contents/MacOS/Xcode$") # PID may change after launch; re-read MCP_XCODE_PID=$P python3 -I scripts/capture_tools.py "$BRIDGE" $SCRATCH/windowed.json ``` stderr prints `serverInfo.version` (server build, e.g. `25464`) and tool count — record both. If windowed capture fails ("bridge closed before response 2"): Xcode may show an agent-approval dialog or have Xcode Tools off in Settings › Intelligence — ask user to allow, retry once. If still failing, ask whether to proceed headless-only; never claim the windowed file was re-captured when it wasn't. ## 3. Diff ```bash python3 -I scripts/diff_tools.py tools-headless-27.2.json $SCRATCH/headless.json python3 -I scripts/diff_tools.py tools-27.2.json $SCRATCH/windowed.json ``` Shows added/removed tools and per-tool changed paths (descriptions, input/output schema properties, enums, required). `identical` = only server build changed. Also check: - Windowed vs headless split still the same (`diff_tools.py windowed.json headless.json`; expected: `tabIdentifier` ↔ `workspaceIdentifier`; windowed-only `XcodeListWindows`, `XcodeGetCurrentFile`, `XcodeListNavigatorIssues`; headless-only `XcodeListWorkspaces`, `XcodeOpenWorkspace`, `XcodeCloseWorkspace`, `XcodeNewProject`). - `DocumentationSearch` is asset-gated — absence may mean missing `com.apple.MobileAsset.AppleDeveloperDocumentation`, not removal. - Tools announced in release notes but absent (e.g. `GetCodeCoverage`) — mention in changelog. ## 4. Update files Captures use `json.dump(indent=2, sort_keys=True)`, ASCII-escaped, no trailing newline — the script matches this, so unchanged schemas are byte-identical. | File | What to change | |---|---| | `tools-<ver>.json`, `tools-headless-<ver>.json` | Copy captures over (new minor version → new files, e.g. `tools-27.3.json`) | | `CHANGELOG.md` | `## Xcode <ver> [beta N / RC]` section: build, server version, prior builds history line; bullets per change, tagged *(beta N)* / *(RC)* when introduced mid-cycle; *(breaking)* for renames/removals. Link tools as ``[`Name`](docs/tools.md#anchor)`` | | `docs/tools.md` | Parameter tables + per-tool notes; mark new params *Xcode <ver>.*; new tools get full sections and an index entry | | `docs/schemas.md` | Version/build column for each file | | `README.md` | Version mention + changelog anchor in intro and "Further documentation" table | When stage changes (beta → RC → release), rename headings/anchors everywhere: `grep -rn -E "RC|beta|<old build>|<old anchor>" README.md CHANGELOG.md docs`. Anchors: `## Xcode 27.2 RC` → `#xcode-272-rc`. Style: concise, factual, describe what the schema says; don't speculate about behavior not in the schema or verified by calling the tool. ## 5. Finish - Show `git diff --stat` and a short summary: build, server version, changes (or "schemas identical"). - Commit only when asked. Message style: `Update with Xcode 27.2 RC`.
View on GitHub