An MCP (Model Context Protocol) server for accessing macOS and iOS device logs directly from VS Code / Copilot.
- List Devices - Show connected iOS devices
- List Simulators - Show available iOS Simulators
- Get Logs - Fetch recent logs filtered by process or subsystem
- Get Device Logs - Fetch logs from connected iOS devices
- Get Simulator Logs - Fetch logs from iOS Simulators
- Get Logs by Level - Filter logs by severity (fault, error, warning, info, debug)
- Stream Logs - Capture live logs for a specified duration
- Search Logs - Search through historical logs (supports regex)
- Get Crash Logs - List and read crash reports
- Watch for Pattern - Stream until a pattern matches
- Export Logs - Save logs to file for sharing
- VPN Logs - Quick shortcut to get WorxVPN-specific logs
cd /Users/itsalfredakku/McpServers/console-mcp
npm install
npm run buildInstall libimobiledevice for direct iOS device log streaming:
brew install libimobiledeviceAdd to your .vscode/mcp.json:
{
"servers": {
"console": {
"command": "node",
"args": ["/Users/itsalfredakku/McpServers/console-mcp/dist/index.js"]
}
}
}List connected iOS devices with their UDIDs.
List available iOS Simulators.
| Parameter | Type | Description |
|---|---|---|
onlyBooted |
boolean | Only show running simulators (default: false) |
runtime |
string | Filter by runtime (e.g., 'iOS 17') |
Get recent logs from macOS.
| Parameter | Type | Description |
|---|---|---|
process |
string | Filter by process name (e.g., 'Safari') |
subsystem |
string | Filter by subsystem (e.g., 'com.apple.network') |
lastMinutes |
number | Minutes of logs to fetch (default: 5) |
maxLines |
number | Max lines to return (default: 200) |
Get logs filtered by severity level.
| Parameter | Type | Description |
|---|---|---|
level |
string | Log level: fault, error, warning, info, debug (required) |
process |
string | Filter by process name |
lastMinutes |
number | Minutes of logs to fetch (default: 5) |
maxLines |
number | Max lines to return (default: 200) |
Get logs from a connected iOS device. Requires libimobiledevice.
| Parameter | Type | Description |
|---|---|---|
device |
string | Device name or UDID (required) |
process |
string | Filter by process name |
lastMinutes |
number | Minutes of logs to capture (default: 5, max: 10) |
maxLines |
number | Max lines to return (default: 200) |
Get logs from an iOS Simulator. Simulator must be booted.
| Parameter | Type | Description |
|---|---|---|
simulator |
string | Simulator name or UDID (required) |
process |
string | Filter by process name |
lastMinutes |
number | Minutes of logs to fetch (default: 5) |
maxLines |
number | Max lines to return (default: 200) |
Stream live logs for a duration.
| Parameter | Type | Description |
|---|---|---|
process |
string | Filter by process name |
durationSeconds |
number | How long to stream (default: 10, max: 30) |
Stream live logs from an iOS Simulator.
| Parameter | Type | Description |
|---|---|---|
simulator |
string | Simulator name or UDID (required) |
process |
string | Filter by process name |
durationSeconds |
number | How long to stream (default: 10, max: 30) |
Search through recent logs with text or regex.
| Parameter | Type | Description |
|---|---|---|
query |
string | Text or regex pattern to search for (required) |
useRegex |
boolean | Treat query as regex (default: false) |
lastMinutes |
number | Minutes to search (default: 30) |
maxLines |
number | Max matching lines (default: 100) |
List recent crash reports from DiagnosticReports.
| Parameter | Type | Description |
|---|---|---|
process |
string | Filter by process/app name |
lastDays |
number | Days to search back (default: 7) |
maxReports |
number | Max reports to list (default: 10) |
Read the full content of a specific crash report.
| Parameter | Type | Description |
|---|---|---|
filename |
string | Crash report filename (required) |
Stream logs until a pattern matches. Great for test automation.
| Parameter | Type | Description |
|---|---|---|
pattern |
string | Text or regex to watch for (required) |
useRegex |
boolean | Treat pattern as regex (default: false) |
process |
string | Filter by process name |
timeoutSeconds |
number | Max wait time (default: 30, max: 60) |
Export logs to a file on the Desktop.
| Parameter | Type | Description |
|---|---|---|
logs |
string | Log content to export (required) |
filename |
string | Optional filename |
format |
string | Export format: txt or json (default: txt) |
Shortcut to get WorxVPN extension logs.
| Parameter | Type | Description |
|---|---|---|
lastMinutes |
number | Minutes of logs (default: 5) |
maxLines |
number | Max lines (default: 300) |
// In Copilot chat:
"List my iOS simulators"
"Get logs from iPhone 15 Pro simulator"
"Show device logs from my iPhone"
"Get the last 5 minutes of Safari logs"
"Show me all error logs from the last 10 minutes"
"Search logs for 'authentication' using regex"
"Get crash logs for MyApp"
"Read the crash report MyApp-2024-12-27.crash"
"Watch for 'connection established' while I connect"
"Export these logs to a file"
"Stream logs for 15 seconds while I reproduce the bug"
"Show me WorxVPN logs"
- macOS 13+ (Ventura or later)
- Node.js 18+
- Xcode (for simulators and
xcruntools) libimobiledevice(optional, for iOS device logs)
- macOS
logcommand is used for local logs xcrun simctlis used for simulator logsidevicesyslogfrom libimobiledevice is used for iOS device logs- iOS device must be paired and trusted for log access
- Crash reports are found in
~/Library/Logs/DiagnosticReports - Exported logs are saved to
~/Desktop/ConsoleMCP-Exports/
MIT