Add scan flow MVP and local Axiom skill workspace
This snapshot establishes the camera-to-result recognition flow and related tests while checking in the project skill/docs assets required for the configured local tooling.
This commit is contained in:
286
.claude/skills/axiom-xcode-mcp-ref/SKILL.md
Normal file
286
.claude/skills/axiom-xcode-mcp-ref/SKILL.md
Normal file
@@ -0,0 +1,286 @@
|
||||
---
|
||||
name: axiom-xcode-mcp-ref
|
||||
description: Reference — all 20 Xcode MCP tools with parameters, return schemas, and examples
|
||||
license: MIT
|
||||
---
|
||||
|
||||
# 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 absolute
|
||||
- `limit` (integer, optional) — max lines to return
|
||||
- `offset` (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 find
|
||||
- `newString` (string, required) — replacement text
|
||||
- `replaceAll` (boolean, optional, default false) — replace all occurrences
|
||||
- **Returns**: `{ filePath, editsApplied, success, originalContentLength, modifiedContentLength, message }`
|
||||
- **Notes**: Single replacement by default. Each `oldString` must be unique unless `replaceAll` is true. Prefer over XcodeWrite for editing existing files.
|
||||
|
||||
### XcodeGlob
|
||||
|
||||
Find files matching a wildcard pattern.
|
||||
|
||||
- **Parameters**:
|
||||
- `tabIdentifier` (string, required)
|
||||
- `pattern` (string, optional, default `**/*`) — glob pattern
|
||||
- `path` (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 pattern
|
||||
- `glob` (string, optional) — file pattern filter
|
||||
- `path` (string, optional) — directory scope
|
||||
- `type` (string, optional) — file type filter
|
||||
- `ignoreCase` (boolean, optional)
|
||||
- `multiline` (boolean, optional)
|
||||
- `outputMode` (enum, optional) — `content`, `filesWithMatches`, `count`
|
||||
- `linesContext` (integer, optional) — context lines
|
||||
- `linesBefore` (integer, optional)
|
||||
- `linesAfter` (integer, optional)
|
||||
- `headLimit` (integer, optional) — max results
|
||||
- `showLineNumbers` (boolean, optional)
|
||||
- **Returns**: `{ results[], pattern, searchPath, matchCount, truncated, message }`
|
||||
- **Notes**: Mirrors ripgrep's interface. Use `outputMode` to 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 Trash
|
||||
- `recursive` (boolean, optional)
|
||||
- **Returns**: `{ removedPath, success, message }`
|
||||
|
||||
### XcodeMV
|
||||
|
||||
Move or copy files.
|
||||
|
||||
- **Parameters**:
|
||||
- `tabIdentifier` (string, required)
|
||||
- `sourcePath` (string, required)
|
||||
- `destinationPath` (string, required)
|
||||
- `operation` (enum, optional) — `move` or `copy`
|
||||
- `overwriteExisting` (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`, `error`
|
||||
- `pattern` (string, optional) — regex filter
|
||||
- `glob` (string, optional) — file pattern filter
|
||||
- **Returns**: `{ buildIsRunning, buildLogEntries[], buildResult, fullLogPath, truncated, totalFound }`
|
||||
- **Notes**: Returns structured entries, not raw text. Each entry has `buildTask` and `emittedIssues[]`.
|
||||
|
||||
### RunAllTests
|
||||
|
||||
Run the full test suite from the active scheme's test plan.
|
||||
|
||||
- **Parameters**:
|
||||
- `tabIdentifier` (string, required)
|
||||
- **Returns**: `{ summary, counts, results[], schemeName, activeTestPlanName }`
|
||||
- **Notes**: `counts` has `total`, `passed`, `failed`, `skipped`, `expectedFailures`, `notRun`. Each result has `targetName`, `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 `GetTestList` to 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`, `error`
|
||||
- `pattern` (string, optional) — regex filter
|
||||
- `glob` (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 execute
|
||||
- `sourceFilePath` (string, required) — Swift file whose context the snippet runs in (has access to its `fileprivate` declarations)
|
||||
- `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 `language` parameter — Swift only.
|
||||
|
||||
### RenderPreview
|
||||
|
||||
Render a SwiftUI preview snapshot.
|
||||
|
||||
- **Parameters**:
|
||||
- `tabIdentifier` (string, required)
|
||||
- `sourceFilePath` (string, required) — Swift file with `#Preview`
|
||||
- `previewDefinitionIndexInFile` (integer, optional, default 0) — zero-based index of which `#Preview` to render
|
||||
- `timeout` (integer, optional, default 120)
|
||||
- **Returns**: `{ previewSnapshotPath }` — path to rendered image
|
||||
- **Notes**: Index-based, not name-based. First `#Preview` in 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 with `title`, `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 call `XcodeListWindows` first.
|
||||
- **`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
|
||||
Reference in New Issue
Block a user