> axiom-xcode-mcp-ref
Reference — all 20 Xcode MCP tools with parameters, return schemas, and examples
curl "https://skillshub.wtf/CharlesWiltgen/Axiom/axiom-xcode-mcp-ref?format=md"Xcode MCP Tool Reference
Complete reference for all 20 tools exposed by Xcode's MCP server (xcrun mcpbridge).
Source: Xcode 26.3 tools/list response. Validated against Keith Smiley's gist (2025-07-15).
Critical: tabIdentifier is required by 18 of 20 tools. Always call XcodeListWindows first.
Discovery
XcodeListWindows
Returns open Xcode windows. Call this first to get tabIdentifier values.
- Parameters: None
- Returns:
{ message: string }— description of open windows - Notes: Only tool that does not require
tabIdentifier.
File Operations
XcodeRead
Read file contents (cat -n format, 600 lines default).
- Parameters:
tabIdentifier(string, required)filePath(string, required) — project-relative or absolutelimit(integer, optional) — max lines to returnoffset(integer, optional) — starting line number
- Returns:
{ content, filePath, fileSize, linesRead, startLine, totalLines }
XcodeWrite
Create or overwrite a file. Automatically adds new files to the project structure.
- Parameters:
tabIdentifier(string, required)filePath(string, required)content(string, required)
- Returns:
{ success, filePath, absolutePath, bytesWritten, linesWritten, wasExistingFile, message }
XcodeUpdate
Edit an existing file with text replacement.
- Parameters:
tabIdentifier(string, required)filePath(string, required)oldString(string, required) — text to findnewString(string, required) — replacement textreplaceAll(boolean, optional, default false) — replace all occurrences
- Returns:
{ filePath, editsApplied, success, originalContentLength, modifiedContentLength, message } - Notes: Single replacement by default. Each
oldStringmust be unique unlessreplaceAllis true. Prefer over XcodeWrite for editing existing files.
XcodeGlob
Find files matching a wildcard pattern.
- Parameters:
tabIdentifier(string, required)pattern(string, optional, default**/*) — glob patternpath(string, optional) — directory to search within
- Returns:
{ matches[], pattern, searchPath, truncated, totalFound, message }
XcodeGrep
Search file contents with regex.
- Parameters:
tabIdentifier(string, required)pattern(string, required) — regex patternglob(string, optional) — file pattern filterpath(string, optional) — directory scopetype(string, optional) — file type filterignoreCase(boolean, optional)multiline(boolean, optional)outputMode(enum, optional) —content,filesWithMatches,countlinesContext(integer, optional) — context lineslinesBefore(integer, optional)linesAfter(integer, optional)headLimit(integer, optional) — max resultsshowLineNumbers(boolean, optional)
- Returns:
{ results[], pattern, searchPath, matchCount, truncated, message } - Notes: Mirrors ripgrep's interface. Use
outputModeto control result format.
XcodeLS
List directory contents.
- Parameters:
tabIdentifier(string, required)path(string, required)recursive(boolean, optional, default true)ignore(array of strings, optional) — patterns to skip
- Returns:
{ items[], path }
XcodeMakeDir
Create a directory in the project.
- Parameters:
tabIdentifier(string, required)directoryPath(string, required)
- Returns:
{ success, message, createdPath }
XcodeRM
Remove files or directories from project. Uses Trash by default.
- Parameters:
tabIdentifier(string, required)path(string, required)deleteFiles(boolean, optional, default true) — move to Trashrecursive(boolean, optional)
- Returns:
{ removedPath, success, message }
XcodeMV
Move or copy files.
- Parameters:
tabIdentifier(string, required)sourcePath(string, required)destinationPath(string, required)operation(enum, optional) —moveorcopyoverwriteExisting(boolean, optional)
- Returns:
{ success, operation, message, sourceOriginalPath, destinationFinalPath } - Notes: Can copy, not just move. May break imports — confirm with user.
Build & Test
BuildProject
Build the project and wait for completion.
- Parameters:
tabIdentifier(string, required)
- Returns:
{ buildResult, elapsedTime, errors[] } - Notes: Each error has
classification,filePath,lineNumber,message.
GetBuildLog
Retrieve build log with optional filtering.
- Parameters:
tabIdentifier(string, required)severity(enum, optional) —remark,warning,errorpattern(string, optional) — regex filterglob(string, optional) — file pattern filter
- Returns:
{ buildIsRunning, buildLogEntries[], buildResult, fullLogPath, truncated, totalFound } - Notes: Returns structured entries, not raw text. Each entry has
buildTaskandemittedIssues[].
RunAllTests
Run the full test suite from the active scheme's test plan.
- Parameters:
tabIdentifier(string, required)
- Returns:
{ summary, counts, results[], schemeName, activeTestPlanName } - Notes:
countshastotal,passed,failed,skipped,expectedFailures,notRun. Each result hastargetName,identifier,displayName,state.
RunSomeTests
Run specific tests by identifier.
- Parameters:
tabIdentifier(string, required)tests(array, required) — each element:{ targetName: string, testIdentifier: string }
- Returns: Same shape as RunAllTests
- Notes: Use
GetTestListto discover valid test identifiers.
GetTestList
List available tests from the active test plan.
- Parameters:
tabIdentifier(string, required)
- Returns:
{ tests[], schemeName, activeTestPlanName } - Notes: Each test has
targetName,identifier,displayName,isEnabled,filePath,lineNumber,tags[].
Diagnostics
XcodeListNavigatorIssues
Get issues from Xcode's Issue Navigator.
- Parameters:
tabIdentifier(string, required)severity(enum, optional) —remark,warning,errorpattern(string, optional) — regex filterglob(string, optional) — file pattern filter
- Returns:
{ issues[], truncated, totalFound, message } - Notes: Each issue has
message,severity,path,line,category,vitality(fresh/stale). Structured and deduplicated.
XcodeRefreshCodeIssuesInFile
Refresh diagnostics for a specific file.
- Parameters:
tabIdentifier(string, required)filePath(string, required)
- Returns:
{ filePath, diagnosticsCount, content, success } - Notes: Triggers Xcode to re-analyze the file.
Execution & Rendering
ExecuteSnippet
Build and run a code snippet in the context of a source file.
- Parameters:
tabIdentifier(string, required)codeSnippet(string, required) — code to executesourceFilePath(string, required) — Swift file whose context the snippet runs in (has access to itsfileprivatedeclarations)timeout(integer, optional, default 120) — seconds
- Returns:
{ executionResults }— console output from print statements - Notes: Not a generic REPL. Runs in the context of a specific file. No
languageparameter — Swift only.
RenderPreview
Render a SwiftUI preview snapshot.
- Parameters:
tabIdentifier(string, required)sourceFilePath(string, required) — Swift file with#PreviewpreviewDefinitionIndexInFile(integer, optional, default 0) — zero-based index of which#Previewto rendertimeout(integer, optional, default 120)
- Returns:
{ previewSnapshotPath }— path to rendered image - Notes: Index-based, not name-based. First
#Previewin the file is index 0.
Search
DocumentationSearch
Search Apple Developer Documentation semantically.
- Parameters:
query(string, required)frameworks(array of strings, optional) — scope to specific frameworks
- Returns:
{ documents[] }— each withtitle,uri,contents,score - Notes: Local semantic search (MLX-accelerated), not web search.
Quick Reference
| Category | Tools |
|---|---|
| Discovery | XcodeListWindows |
| File Read | XcodeRead, XcodeGlob, XcodeGrep, XcodeLS |
| File Write | XcodeWrite, XcodeUpdate, XcodeMakeDir |
| File Destructive | XcodeRM, XcodeMV |
| Build | BuildProject, GetBuildLog |
| Test | RunAllTests, RunSomeTests, GetTestList |
| Diagnostics | XcodeListNavigatorIssues, XcodeRefreshCodeIssuesInFile |
| Execution | ExecuteSnippet |
| Preview | RenderPreview |
| Search | DocumentationSearch |
Common Parameter Patterns
tabIdentifier— Required by 18/20 tools. Always callXcodeListWindowsfirst.filePath— Used by XcodeRead, XcodeWrite, XcodeUpdate, XcodeRefreshCodeIssuesInFile. Project-relative or absolute.path— Used by XcodeLS, XcodeRM, XcodeGlob. Directory path.directoryPath— Used by XcodeMakeDir.sourceFilePath— Used by ExecuteSnippet, RenderPreview. Must be a Swift source file.
Resources
Skills: axiom-xcode-mcp-setup, axiom-xcode-mcp-tools
> related_skills --same-repo
> axiom-eventkit
Use when working with ANY calendar event, reminder, EventKit permission, or EventKitUI controller. Covers access tiers (no-access, write-only, full), permission migration from pre-iOS 17, store lifecycle, reminder patterns, EventKitUI controller selection, Siri Event Suggestions, virtual conference extensions.
> axiom-eventkit-ref
Use when needing EventKit API details — EKEventStore, EKEvent, EKReminder, EventKitUI view controllers, EKCalendarChooser, authorization methods, predicate-based fetching, recurrence rules, Siri Event Suggestions donation, EKVirtualConferenceProvider, location-based reminders, and EKErrorDomain codes
> axiom-contacts
Use when accessing ANY contact data, requesting Contacts permissions, choosing between picker and store access, implementing Contact Access Button, or migrating to iOS 18 limited access. Covers authorization levels, CNContactStore, ContactProvider, key fetching, incremental sync.
> axiom-contacts-ref
Use when needing Contacts API details — CNContactStore, CNMutableContact, CNSaveRequest, CNContactFormatter, CNContactVCardSerialization, CNContactPickerViewController, ContactAccessButton, contactAccessPicker, ContactProvider extension, CNChangeHistoryFetchRequest, contact key descriptors, and CNError codes