by mihaelamj
A local Apple Documentation crawler and MCP server. Written in Swift.
# Add to your Claude Code skills
git clone https://github.com/mihaelamj/cupertinoGuides for using mcp servers skills like cupertino.
Last scanned: 5/9/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-09T06:15:54.205Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
🕯️ v1.2.1 released on 2026-05-23. Maintenance release: architectural cleanup + DI / pluggability lift. Zero schema delta vs v1.2.0; the v1.2.0 bundle works as-is with the v1.2.1 binary (
cupertino setupstill downloadscupertino-databases-v1.2.0.zip). Headlines: Source Independence Day reached (adding a new content source is now a composition-root-only PR); strict-DI + standalone-portability epic closed (every Search-side producer is foundation-only, mechanically verified byscripts/check-target-portability.sh);Distribution.DatabaseHealthCheckstrategy seam covers Doctor's 3 sibling per-DB sections. Live dashboard at https://cupertino.aleahim.com/. See the v1.2.1 release notes.v1.2.0 "ironclad" (2026-05-20) was the most recent bundle release. Search-quality release: rank-1 accuracy on canonical-lookup queries jumped from 52% to 92% on the Phase 1 corpus, zero regressions across 110 paired queries, 30 / 30 modern Swift wins on the deprecation-pair corpus.
databaseVersionis1.2.0:cupertino setupdownloadscupertino-databases-v1.2.0.zip(690 MiB compressed, sha256097d6633…f47747) carrying 352,712 indexed documents across 420 frameworks,search.dbuser_version18,packages.db5,samples.db4, 0 poison rows across the 13-category audit. Full write-up atdocs/release-writeup-v1.2.0.md. See the v1.2.0 release notes.
Apple Documentation Crawler & MCP Server
A Swift-based tool to crawl, index, and serve Apple's developer documentation to AI agents via the Model Context Protocol (MCP).

Cupertino is a local, structured, AI-ready documentation system for Apple platforms. It:
Note: When building from source, commands must be run from the
Packagesdirectory. The one-command install works from anywhere.
Building from source additionally requires Swift 6.3+ and Xcode 26+ (use xcrun swift build, not bare swift)
One-command install (recommended):
bash <(curl -sSL https://raw.githubusercontent.com/mihaelamj/cupertino/main/install.sh)
This downloads a pre-built, signed, and notarized universal binary, installs it to /usr/local/bin, and downloads the documentation databases.
Or with Homebrew:
brew tap mihaelamj/tap
brew install cupertino
cupertino setup
Or build from source:
git clone https://github.com/mihaelamj/cupertino.git
cd cupertino
# Using Makefile (recommended)
make build # Build release binary
sudo make install # Install to /usr/local/bin
# Or using Swift Package Manager directly
cd Packages
swift build -c release
sudo ln -sf "$(pwd)/.build/release/cupertino" /usr/local/bin/cupertino
Demo Video: Watch on YouTube
# Quick Setup (Recommended) - download pre-built databases (~30 seconds)
cupertino setup # Download databases from GitHub
cupertino serve # Start MCP server
# Alternative: Build from GitHub (~45 minutes)
cupertino save --remote # Stream and build locally
# Or fetch documentation yourself
cupertino fetch --type docs # Apple Developer Documentation
cupertino fetch --type swift # Swift.org documentation
cupertino fetch --type evolution # Swift Evolution proposals
cupertino fetch --type packages # Swift package metadata + GitHub archives
cupertino fetch --type code # Sample code from Apple (requires auth)
cupertino fetch --type samples # Sample code from GitHub (recommended)
cupertino fetch --type archive # Apple Archive programming guides
cupertino fetch --type hig # Human Interface Guidelines
cupertino fetch --type availability # Platform availability data
cupertino fetch --type all # All types in parallel
# Build indexes
cupertino save # Build documentation search index (from local files)
cupertino save --remote # Build from GitHub (no local files needed)
cupertino save --samples # Index sample code for search
# Start server
cupertino # Start MCP server (default command)
cupertino serve # Start MCP server (explicit)
# Download pre-built databases from GitHub (~30 seconds)
cupertino setup
# Start MCP server
cupertino serve
Note:
cupertino setup --forceis no longer valid (the flag was removed in v1.2.0).cupertino setupoverwrites by default; pass--keep-existingto skip the download when databases are already installed.
# Stream and build locally (~45 minutes)
# Use this if you want to build the database yourself
cupertino save --remote
# Start MCP server
cupertino serve
# Download Apple documentation (~12+ days for ~404,000+ raw pages, indexed down to ~277,640)
# Takes time due to 0.05s default delay between requests
cupertino fetch --type docs --max-pages 15000
# Download Swift Evolution proposals (~2-5 minutes)
cupertino fetch --type evolution
# Download sample code from GitHub (~4 minutes, 619 projects)
cupertino fetch --type samples
# Build search index (~2-5 minutes)
cupertino save
~/Library/Application Support/Claude/claude_desktop_config.json:{
"mcpServers": {
"cupertino": {
"command": "/usr/local/bin/cupertino",
"args": ["serve"]
}
}
}
Note: Use
/opt/homebrew/bin/cupertinofor Homebrew on Apple Silicon,/usr/local/bin/cupertinofor Intel or manual install. Runwhich cupertinoto find your path.
Restart Claude Desktop
Ask Claude about Apple APIs:
If you're using Claude Code, you can add Cupertino as an MCP server with a single command:
claude mcp add cupertino --scope user -- $(which cupertino)
This registers Cupertino globally for all your projects. Claude Code will automatically have access to Apple documentation search.
If you're using OpenAI Codex, add Cupertino with:
codex mcp add cupertino -- $(which cupertino) serve --no-reap
Or add directly to ~/.codex/config.toml:
[mcp_servers.cupertino]
command = "/opt/homebrew/bin/cupertino" # Homebrew on Apple Silicon
# command = "/usr/local/bin/cupertino" # Intel Mac or manual install
args = ["serve", "--no-reap"]
Why
--no-reap? Codex spawns a freshcupertino serveper tool call. Without--no-reap, each new instance kills its predecessor as a stale sibling, and the in-flight transport closes (Transport closederror on every tool call — see #280). Claude Desktop / Cursor users keep the default (reap on) so MCP-host config reloads don't leak orphan servers.Equivalent env-var form:
CUPERTINO_DISABLE_REAPER=1in[mcp_servers.cupertino.env].
Tip: Run
which cupertinoto find your installation path.
Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json for global access):
{
"mcpServers": {
"cupertino": {
"command": "/opt/homebrew/bin/cupertino",
"args": ["serve"]
}
}
}
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"cupertino": {
"type": "stdio",
"command": "/opt/homebrew/bin/cupertino",
"args": ["serve"]
}
}
}
GitHub Copilot for Xcode supports MCP servers via Agent Mode. In the app, go to the Tools tab → MCP sub-tab → MCP Configuration → Edit Config, or edit ~/.config/github-copilot/xcode/mcp.json direct