Skip to content

Commit 8bd49ad

Browse files
cameroncookeclaude
andcommitted
chore(release): Update skill URL updates
Also update docs/SKILLS.md to use the versioned install script. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 205fabb commit 8bd49ad

5 files changed

Lines changed: 390 additions & 41 deletions

File tree

README.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,14 +156,19 @@ When configuring a client manually, ensure the command includes the `mcp` subcom
156156
- Xcode 16.x or later
157157
- Node.js 18.x or later
158158

159-
## Skill
159+
## Skills
160160

161-
XcodeBuildMCP now includes an optional agent skill. Some clients (e.g., Cursor, Claude Code) hide MCP tool schemas behind search/progressive disclosure, which can reduce tool discovery and usage. The skill provides a concise overview of available tools to counter that. If your client already exposes tools up front, you likely don’t need it; only use it if your agent isn’t reaching for XcodeBuildMCP tools.
161+
XcodeBuildMCP now includes two optional agent skills:
162+
163+
- **MPC Skill**: Primes the agent with instructions on how to use the MCP server's tools (optional when using the MCP server).
164+
165+
- **CLI Skill**: Primes the agent with instructions on how to navigate the CLI (recommended when using the CLI).
166+
167+
168+
To install, copy and past the below command into a terminal and follow the on-screen instructions.
162169

163-
To install, download and run the installer in a terminal, then choose your client when prompted:
164170
```bash
165-
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh -o install-skill.sh
166-
bash install-skill.sh
171+
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh -o install-skill.sh && bash install-skill.sh
167172
```
168173

169174
For further information on how to install the skill, see: [docs/SKILLS.md](docs/SKILLS.md)

docs/SKILLS.md

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,54 @@
11
# XcodeBuildMCP Skill
22

3-
This repository bundles a minimal skill that summarizes XcodeBuildMCP workflows and tools to help steer clients to use MCP tools, this is espeically important for clients that progressively load or hide MCP tools behind search interfaces (i.e. Cursor, Claude Code).
3+
XcodeBuildMCP now includes two optional agent skills:
44

5-
## Install (Claude Code)
5+
- **MPC Skill**: Primes the agent with instructions on how to use the MCP server's tools (optional when using the MCP server).
6+
7+
- **CLI Skill**: Primes the agent with instructions on how to navigate the CLI (recommended when using the CLI).
8+
9+
## Easiest way to install
10+
11+
Install via the interactive installer and follow the on-screen instructions.
12+
13+
```bash
14+
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh -o install-skill.sh && bash install-skill.sh
15+
```
16+
17+
## Automated installation
18+
19+
Useful for CI/CD pipelines or for agentic installation. `--skill` should be set to either `mcp` or `cli` to install the appropriate skill.
20+
21+
### Install (Claude Code)
622

723
```bash
8-
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh | bash -s -- --claude
24+
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh -o install-skill.sh && bash install-skill.sh --claude --remove-conflict --skill <mcp|cli>
925
```
1026

11-
## Install (Cursor)
27+
### Install (Cursor)
1228

1329
```bash
14-
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh | bash -s -- --cursor
30+
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh -o install-skill.sh && bash install-skill.sh --cursor --remove-conflict --skill <mcp|cli>
1531
```
1632

17-
## Install (Codex CLI)
33+
### Install (Codex CLI)
34+
35+
```bash
36+
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh -o install-skill.sh && bash install-skill.sh --codex --remove-conflict --skill <mcp|cli>
37+
```
38+
39+
### Install (Other Clients)
40+
41+
For other clients if you know the path to the skills directory you can pass the `--dest` flag.
1842

1943
```bash
20-
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh | bash -s -- --codex
44+
curl -fsSL https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP/main/scripts/install-skill.sh -o install-skill.sh && bash install-skill.sh --dest /path/to/skills --remove-conflict --skill <mcp|cli>
2145
```
2246

23-
## Install (Other Clients)
47+
## Unsupporting Clients
2448

25-
Some MCP clients do not yet support skills. Use the skill content as a concise, static instruction block:
49+
Some MCP clients that do not yet support skills. Use the skill content as a concise, static instruction prompt:
2650

27-
1. Open `skills/xcodebuildmcp/SKILL.md`.
51+
1. Open `skills/xcodebuildmcp[-cli]/SKILL.md`.
2852
2. Copy the body (everything below the YAML frontmatter).
2953
3. Paste it into the client’s global or project-level instructions/rules area.
3054

install-skill.sh

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
usage() {
5+
cat <<'EOF'
6+
Usage: install-skill.sh --codex|--claude|--cursor|--dest <path> [--skill <mcp|cli>] [--ref <git-ref>] [--remove-conflict]
7+
8+
Installs (or replaces) the XcodeBuildMCP skill. If --skill is omitted, the
9+
installer will ask which skill to install.
10+
If the script is run from a local checkout, it installs the local skill file.
11+
Otherwise it downloads the skill from the provided --ref or from main.
12+
13+
If no destination is provided, the installer will prompt for a client.
14+
EOF
15+
}
16+
17+
destination=""
18+
skill_choice=""
19+
skill_ref_override=""
20+
remove_conflict="false"
21+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
22+
repo_root="$(cd "${script_dir}/.." && pwd)"
23+
24+
while [[ $# -gt 0 ]]; do
25+
case "$1" in
26+
--codex)
27+
destination="${HOME}/.codex/skills/public"
28+
shift
29+
;;
30+
--claude)
31+
destination="${HOME}/.claude/skills"
32+
shift
33+
;;
34+
--cursor)
35+
destination="${HOME}/.cursor/skills"
36+
shift
37+
;;
38+
--dest)
39+
if [[ $# -lt 2 ]]; then
40+
echo "Missing value for --dest" >&2
41+
usage
42+
exit 1
43+
fi
44+
destination="$2"
45+
shift 2
46+
;;
47+
--skill)
48+
if [[ $# -lt 2 ]]; then
49+
echo "Missing value for --skill" >&2
50+
usage
51+
exit 1
52+
fi
53+
skill_choice="$2"
54+
shift 2
55+
;;
56+
--ref)
57+
if [[ $# -lt 2 ]]; then
58+
echo "Missing value for --ref" >&2
59+
usage
60+
exit 1
61+
fi
62+
skill_ref_override="$2"
63+
shift 2
64+
;;
65+
--remove-conflict)
66+
remove_conflict="true"
67+
shift
68+
;;
69+
-h|--help)
70+
usage
71+
exit 0
72+
;;
73+
*)
74+
echo "Unknown option: $1" >&2
75+
usage
76+
exit 1
77+
;;
78+
esac
79+
done
80+
81+
prompt_for_destination() {
82+
while true; do
83+
printf "Which client should receive the skill?\n"
84+
printf "1) Codex\n"
85+
printf "2) Claude\n"
86+
printf "3) Cursor\n"
87+
read -r -p "Enter 1, 2, or 3: " selection
88+
case "${selection}" in
89+
1)
90+
destination="${HOME}/.codex/skills/public"
91+
return 0
92+
;;
93+
2)
94+
destination="${HOME}/.claude/skills"
95+
return 0
96+
;;
97+
3)
98+
destination="${HOME}/.cursor/skills"
99+
return 0
100+
;;
101+
*)
102+
echo "Invalid selection. Please enter 1, 2, or 3."
103+
;;
104+
esac
105+
done
106+
}
107+
108+
prompt_for_skill() {
109+
while true; do
110+
printf "Which skill would you like to install?\n"
111+
printf "1) XcodeBuildMCP (MCP server)\n"
112+
printf "2) XcodeBuildMCP CLI\n"
113+
read -r -p "Enter 1 or 2: " selection
114+
case "${selection}" in
115+
1)
116+
skill_choice="mcp"
117+
return 0
118+
;;
119+
2)
120+
skill_choice="cli"
121+
return 0
122+
;;
123+
*)
124+
echo "Invalid selection. Please enter 1 or 2."
125+
;;
126+
esac
127+
done
128+
}
129+
130+
if [[ -z "${destination}" ]]; then
131+
prompt_for_destination
132+
fi
133+
134+
if [[ -z "${skill_choice}" ]]; then
135+
prompt_for_skill
136+
fi
137+
138+
case "${skill_choice}" in
139+
mcp|server|xcodebuildmcp)
140+
skill_dir_name="xcodebuildmcp"
141+
skill_label="XcodeBuildMCP (MCP server)"
142+
alt_dir_name="xcodebuildmcp-cli"
143+
alt_label="XcodeBuildMCP CLI"
144+
;;
145+
cli|xcodebuildmcp-cli)
146+
skill_dir_name="xcodebuildmcp-cli"
147+
skill_label="XcodeBuildMCP CLI"
148+
alt_dir_name="xcodebuildmcp"
149+
alt_label="XcodeBuildMCP (MCP server)"
150+
;;
151+
*)
152+
echo "Unknown skill: ${skill_choice}" >&2
153+
usage
154+
exit 1
155+
;;
156+
esac
157+
158+
skill_dir="${destination}/${skill_dir_name}"
159+
alt_dir="${destination}/${alt_dir_name}"
160+
skill_path="skills/${skill_dir_name}/SKILL.md"
161+
skill_base_url="https://raw.githubusercontent.com/cameroncooke/XcodeBuildMCP"
162+
skill_ref="main"
163+
164+
if [[ -n "${skill_ref_override}" ]]; then
165+
skill_ref="${skill_ref_override}"
166+
fi
167+
168+
if [[ -e "${alt_dir}" ]]; then
169+
if [[ "${remove_conflict}" == "true" ]]; then
170+
rm -r "${alt_dir}"
171+
else
172+
printf "%s\n" "Only one skill can be installed at a time because the MCP and CLI skills conflict."
173+
read -r -p "Found ${alt_label} at ${alt_dir}. Remove it to continue? [y/N]: " confirm
174+
case "${confirm}" in
175+
y|Y|yes|YES)
176+
rm -r "${alt_dir}"
177+
;;
178+
*)
179+
echo "Aborting to avoid installing both skills."
180+
exit 1
181+
;;
182+
esac
183+
fi
184+
fi
185+
186+
if [[ -e "${skill_dir}" ]]; then
187+
rm -r "${skill_dir}"
188+
fi
189+
mkdir -p "${skill_dir}"
190+
191+
primary_url="${skill_base_url}/${skill_ref}/${skill_path}"
192+
fallback_url="${skill_base_url}/main/${skill_path}"
193+
local_skill_path="${repo_root}/${skill_path}"
194+
195+
if [[ -f "${local_skill_path}" ]]; then
196+
cp "${local_skill_path}" "${skill_dir}/SKILL.md"
197+
else
198+
if ! curl -fsSL "${primary_url}" -o "${skill_dir}/SKILL.md"; then
199+
if [[ "${skill_ref}" != "main" ]]; then
200+
printf "%s\n" "Release tag ${skill_ref} not found. Falling back to main."
201+
curl -fsSL "${fallback_url}" -o "${skill_dir}/SKILL.md"
202+
else
203+
printf "%s\n" "Failed to download ${primary_url}." >&2
204+
exit 1
205+
fi
206+
fi
207+
fi
208+
209+
printf 'Installed %s to %s\n' "${skill_label}" "${skill_dir}"

0 commit comments

Comments
 (0)