Xcode AI integration for DSH: 26 Xcode MCP tools (mcpbridge) + Apple platform skills + Xcode Intelligence-style persona (agent preset or global bundle).
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:jihongboo/dsh-apple-mode
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Xcode AI integration mode for DeepSeek Harness (dsh) — an agent preset + installer that gives your DSH sessions the full Xcode AI stack:
- 26 Xcode MCP tools (
mcp__xcode__*) via Apple's officialmcpbridge - Xcode Intelligence–style persona (Swift-first, tool-assisted, explain-vs-change classification) adapted from the
IDEIntelligenceChatprompt templates - 10 Apple platform skills (SwiftUI, App Intents, security hardening, bounds safety, …) generated locally from your own Xcode
📌
dsh-plugintopic repo. DeepSeek Harness is in developer preview — pin an exactdshversion for your automation.
Why a preset (mode) instead of a global MCP wiring?
The three capabilities map onto three different DSH mechanisms:
| Layer | Capability | DSH mechanism |
|---|---|---|
| Execute | 26 mcp__xcode__* tools |
dsh-mcp-client (mounted inside the preset) |
| Knowledge | 10 Apple skills | dsh-skill-filesystem (global, lazy-loaded) |
| Behavior | Xcode Intelligence persona | agent preset (this repo) |
Wiring the MCP server globally would put ~26 large tool schemas (~6k+ tokens/request) into every session. Mounting it inside a preset keeps the cost only in sessions that opt in — pick Apple Mode when creating a session, and you get the whole stack; other sessions stay lean.
Requirements
- macOS
- DeepSeek Harness 0.2.0+ for the plugin path (the desktop app ships 0.2.x). DSH 0.1.x uses the legacy on-disk preset through
install.sh— see Version compatibility. - Xcode 26+ (contains
mcpbridgeandxcrun agent skills export). To use the MCP tools, Xcode must be running with the target project open, and you must click Allow on the MCP access dialog Xcode shows (see Usage).
Install
DSH 0.2.0+ (desktop app / current) — recommended
Install the plugin with the plugin manager. Its bundle patch declares the Apple Mode agent preset:
dsh plugin --profile web add "github:jihongboo/dsh-apple-mode"
Pin a released version by appending a tag — recommended for reproducibility, since an install without a tag tracks the default branch:
dsh plugin --profile web add "github:jihongboo/dsh-apple-mode#v1.1.1"
(In the desktop app: Settings → Plugins → install from GitHub.) Restart DSH, then pick Apple Mode when creating a session.
About the plugin manager's pnpm warning. This package is configuration-only — no
scripts, no dependencies, no build step (seepackage.json). If a registry page warns that pnpm ≥ 10 refuses to run git-dependencypreparescripts and suggests addingallowBuildstopnpm-workspace.yaml, you can safely skip it: there is nothing to build or execute, and granting it would only widen the authorization surface for no benefit. Publishing to npm (see docs/publishing.md) removes the warning entirely.
Then generate the Apple skills locally — the plugin deliberately does not redistribute them:
git clone https://github.com/jihongboo/dsh-apple-mode.git
cd dsh-apple-mode
./install.sh --skills-only
DSH 0.1.x — legacy on-disk preset
git clone https://github.com/jihongboo/dsh-apple-mode.git
cd dsh-apple-mode
./install.sh
install.sh then does three things:
- Detects your Xcode installs and lets you choose which one provides
mcpbridge(see below). - Installs the on-disk preset →
~/.dsh/.agent-presets/apple/(existing copy is backed up). - Generates the 10 Xcode AI skills on your machine via
xcrun agent skills exportinto~/.agents/skills/.
Why no vendored skills? The skills are Apple-authored guidance. Generating them from your own Xcode at install time avoids redistributing Apple content — the repo ships only our own code, config, and docs.
Version compatibility
DSH 0.2 renamed and reworked agent presets: a preset is now a @deepseek-ai/dsh-agent-preset row declared by a bundle patch, and the registry no longer scans directories.
| DSH | Preset mechanism | How to get Apple Mode here |
|---|---|---|
| 0.2.0+ (desktop) | @deepseek-ai/dsh-agent-preset rows from a bundle patch |
dsh plugin --profile web add "github:jihongboo/dsh-apple-mode" |
0.1.x (older npx/brew) |
on-disk directories under ~/.dsh/.agent-presets/<id>/ |
./install.sh |
Skills are discovered from ~/.agents/skills on both versions, so ./install.sh --skills-only works everywhere.
Choosing an Xcode (multiple installs)
If you have several Xcode versions (e.g. Xcode.app, Xcode-beta.app, Xcode-26.2.app), mcpbridge lives in each one's Contents/Developer/usr/bin — and only in Xcode 26+.
DSH 0.2.0+: the preset's MCP row runs xcrun mcpbridge, so the Xcode comes from xcode-select:
sudo xcode-select -s /Applications/Xcode-26.2.app/Contents/Developer # switch globally
DEVELOPER_DIR=/Applications/Xcode-beta.app/Contents/Developer dsh web # or per launch
To drive a specific running Xcode instance, add env: { MCP_XCODE_PID: '<pid>' } to the mcp-xcode row inside the preset (edit cordis.patch.yml in this repo, or override the preset-apple row from your profile patch).
DSH 0.1.x: install.sh scans /Applications for every install that provides mcpbridge and prompts you to pick:
Found Xcode installs providing mcpbridge:
1) /Applications/Xcode-beta.app/Contents/Developer (xcode-select default)
2) /Applications/Xcode.app/Contents/Developer
Choose (1-2, default 1):
- Default = the Xcode selected by
xcode-select→ the preset usescommand: xcrun mcpbridge(portable; follows futurexcode-selectchanges). - Pick another → the chosen
…/Contents/Developer/usr/bin/mcpbridgeis baked into the installed preset as an absolute path. - Non-interactive:
./install.sh --xcode /Applications/Xcode.app(or--xcode …/Contents/Developer);./install.sh --list-xcodesprints the candidates. - Switch at runtime without reinstalling:
./install.sh --runtime-selectableinstallsbin/mcpbridgeas the command; setDSH_XCODE_DEVELOPER_DIR=/Applications/…/Contents/Developerwhen launchingdshto switch. (Resolution:DSH_XCODE_DEVELOPER_DIR→xcrun→ newest/Applications/Xcode*.app.)
To change the choice later: re-run ./install.sh, edit the mcp-xcode row in ~/.dsh/.agent-presets/apple/agent.cordis.yml, or use the runtime env var above.
Alternative: global MCP wiring (MCP in every session)
The preset keeps the ~26 tool schemas scoped to Apple Mode sessions. To get the Xcode MCP tools in every session instead, insert the client row in your profile patch (~/.dsh/profiles/<profile>/cordis.patch.yml):
- insert:
- id: mcp-xcode
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: xcode
transport: stdio
command: xcrun
args: ['mcpbridge']
toolCallTimeoutMs: 120000
Use one path, not both: two live instances with serverName: xcode collide and the later one fails to load. See docs/global-mcp.md.
Usage
- Restart
dsh(or just open a new session — the preset can only be selected on a blank session). - Pick Apple Mode as the agent preset when creating the session.
- The session now has:
mcp__xcode__*tools — operate the open Xcode workspace:XcodeRead/Write/Update/MV/RM,XcodeGlob/Grep/LS,UpdateTargetBuildSetting/UpdateFileCompilerFlags,XcodeListNavigatorIssues, scheme/run-destination/test-plan switching,XcodeNewTarget,StringCatalogRead/Edit, …- All Apple platform skills (lazy-loaded on demand).
- An Apple-first, tool-assisted working style.
Before using the
mcp__xcode__*tools:
- Xcode must be running with the project/workspace you want to work on opened in it.
- On first connection, Xcode shows an MCP access dialog — click Allow (允许). Until you do, tool calls will be rejected.
Build/run/test still happen from the terminal (xcodebuild, pipe through xcsift for structured output); the MCP toolset covers project surgery, build settings, diagnostics, destinations, and localization.
What you get
MCP tools (26, namespaced mcp__xcode__*)
| Group | Tools |
|---|---|
| Project I/O | XcodeRead XcodeWrite XcodeUpdate XcodeMV XcodeRM XcodeMakeDir |
| Search | XcodeGlob XcodeGrep XcodeLS |
| Targets & settings | XcodeNewTarget XcodeListTemplates XcodeListTargets UpdateTargetBuildSetting UpdateFileCompilerFlags |
| Scheme / destination / tests | XcodeListSchemes XcodeSwitchScheme XcodeListRunDestinations XcodeSwitchRunDestination XcodeListTestPlans XcodeSwitchTestPlan |
| Diagnostics | XcodeListNavigatorIssues XcodeRefreshCodeIssuesInFile |
| Localization | StringCatalogRead StringCatalogEdit |
| Windows | XcodeListWindows XcodeGetCurrentFile |
Skills (10, generated at install time)
swiftui-specialist · swiftui-whats-new-27 · app-intents-specialist · app-intents-whats-new-27 · audit-xcode-security-settings · adopt-c-bounds-safety · uikit-app-modernization · modernize-tests · device-interaction · building-document-based-swiftui-applications
Repository layout
.
├── presets/apple/ # The agent preset: agent.cordis.yml + preset.yml
├── bin/mcpbridge # Runtime-selectable mcpbridge launcher (--runtime-selectable)
├── cordis.patch.yml # Bundle patch: declares the Apple Mode preset (DSH 0.2+)
├── package.json # Bundle manifest (dsh.bundle.patch)
├── docs/
│ ├── XCODE_AI_INTEGRATION.md # Full integration notes (Chinese)
│ ├── global-mcp.md # Alternative: wire the MCP server into every session
│ └── publishing.md # Publishing this package to npm
├── install.sh # Xcode picker + preset install + local skills generation
├── uninstall.sh
└── LICENSE # MIT
Customization
- Different Xcode: re-run
./install.sh(picker),./install.sh --xcode <path>(non-interactive),--runtime-selectable+DSH_XCODE_DEVELOPER_DIR, or addenv: { MCP_XCODE_PID: '<pid>' }to themcp-xcoderow to drive a specific running instance. See Choosing an Xcode. - Persona: edit the
personarow text in the same file. - Sync skills after Xcode updates: re-run
./install.sh(skills are replaced, preset is backed up). - Keep in sync with upstream
standardpreset:diffagainstnode_modules/@deepseek-ai/dsh/config/agent-presets/standard/agent.cordis.yml.
Security notes
- MCP tool calls do not go through the DSH file sandbox — they go through the tool-approval flow.
XcodeUpdate/XcodeWritemodify real Xcode project files (includingproject.pbxproj). - The preset only activates when you select it; no global config is touched by
install.sh.
Contributing
PRs welcome. Open an issue for feature requests. If you publish your own DSH extension, add the dsh-plugin topic for discoverability and consider submitting it to awesome-dsh-plugin.
License
MIT. The Xcode AI skills are generated on your machine from your own Xcode installation and remain subject to Apple's license; the persona prompt style is adapted from Xcode Intelligence templates (behavioral guidance, not Apple source text).
Links
More in this category
DayuanJiang/next-ai-draw-io#dsh-plugin★ 36802
Draws draw.io diagrams in DeepSeek Harness through the next-ai-drawio MCP server: the link in the reply opens a live preview in the right sidebar, you can edit the diagram by hand, and each AI change is a version you can restore. Node.js 18+; npx downloads the MCP server on first use.
Tencent/WeKnora#dsh-weknora★ 36302
Four read-only tools over a WeKnora knowledge base: list knowledge bases, hybrid passage search, reassemble one document's chunks in order, and WeKnora's own cited RAG or ReAct-agent answer with a resumable session id.
superdesigndev/treg★ 7042
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
T-Auto/dsh-ops★ 5074
Provides bash, PowerShell 7, and high-performance Rust tools for DSH on Windows to reduce token usage.
sixtysevenlf/dsh-blender-plugin★ 1575
Lets a DSH agent drive a local Blender over a direct TCP channel with 15 tools: viewport frames, custom-angle renders, Python execution, headless and job offload, transaction rollback, and a planning layer of 228 ops across 34 families.
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1155
Tencent CloudBase backend for DeepSeek Harness — scaffold and deploy full-stack apps from chat, render query results as table cards with paging, sorting and CSV export, preview a deployment on its domain, and call the CloudBase MCP toolset (`mcp__cloudbase__*`) with device-code login.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.