axiom-xcode-mcp-ref
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