apple-log-mcp
Provides tools for accessing and managing Apple platform logs (console, unified, diagnostic) from Apple devices and simulators.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@apple-log-mcpstart live logs for the booted iPhone simulator"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
apple-log-mcp
Local MCP server for Apple platform console, unified, and diagnostic logs.
Install
git clone https://github.com/BBC6BAE9/apple-log-mcp.git "$HOME/.local/share/apple-log-mcp"
cd "$HOME/.local/share/apple-log-mcp"
npm install
npm run buildRelated MCP server: xcforge
Codex config
Add this to ~/.codex/config.toml.
[mcp_servers.apple_log]
command = "/bin/zsh"
args = ["-lc", "node \"$HOME/.local/share/apple-log-mcp/dist/index.js\""]
startup_timeout_sec = 30Restart Codex after changing the config.
Claude Desktop config
Add this to your MCP config JSON.
{
"mcpServers": {
"apple_log": {
"command": "/bin/zsh",
"args": ["-lc", "node \"$HOME/.local/share/apple-log-mcp/dist/index.js\""]
}
}
}Tools
apple_list_devices: list physical and simulated Apple devices.apple_start_live_logs: start a live capture session.apple_read_live_logs: read recent or incremental log lines.apple_stop_live_logs: stop a capture session.apple_list_log_sessions: list active sessions.
Example
Start live logs for a simulator:
{
"target": "simulator",
"device": "booted",
"bundleId": "com.example.app",
"streams": ["console", "unified"],
"terminateExisting": true
}Then read logs:
{
"sessionId": "<session id from apple_start_live_logs>",
"limit": 200
}Notes
Swift
print()is stdout. To capture it reliably, start the app through this MCP.Objective-C
NSLog,os_log, and SwiftLoggerusually go through Apple unified logging.The MCP does not expose a raw shell. It wraps
xcrun devicectl,xcrun simctl, andlog.
Available Tools
5 toolsapple_list_devicesB
List physical and simulated Apple devices known to Xcode/CoreDevice.
| Name | Required | Description | Default |
|---|---|---|---|
| includePhysical | No | ||
| includeSimulators | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. The description indicates a read-only listing operation, which is non-destructive. However, it does not disclose any additional behavioral traits such as authentication requirements, error conditions, or performance considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that immediately conveys the tool's purpose with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too minimal for a tool with two parameters. It does not explain parameter semantics, output format, or any limits. Given the lack of annotations and output schema, more context is needed for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has two boolean parameters (includePhysical, includeSimulators) with 0% schema description coverage, but the tool description does not explain their purpose or effect. The agent receives no guidance on how to filter results using these parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Apple devices, using a specific verb ('List') and resource ('physical and simulated Apple devices'). It distinguishes itself from the sibling tools, which all deal with log sessions or logs, not devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The distinction from siblings is implicit based on topic (devices vs. logs), but no when-to-use or when-not-to-use advice is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_list_log_sessionsA
List active and stopped Apple log capture sessions held by this MCP process.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It discloses that the tool lists sessions held by this MCP process, implying a read-only operation, but lacks details on permissions or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that is front-loaded and contains no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters and no output schema, the description is mostly complete but could hint at the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (empty schema, 0 parameters); baseline is 3. The description adds no parameter information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'active and stopped Apple log capture sessions held by this MCP process', distinguishing it from sibling tools like apple_start_live_logs and apple_list_devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for inspecting current sessions but does not explicitly state when to use it vs alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_read_live_logsC
Read recent or incremental lines from a live Apple log capture session.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| source | No | all | |
| contains | No | ||
| sessionId | Yes | ||
| sinceSequence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose side effects, authentication needs, or error cases. It only mentions reading and incremental lines, but omits behavioral details like session validity or that it's a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, which is efficient but lacks necessary detail. It could be improved by adding parameter guidance while maintaining brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and no annotations, the description is too sparse. It does not explain the relationship between parameters like sinceSequence and incremental reading, or how to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters are described in the schema or the description. With 0% schema coverage, the description should explain key parameters like sessionId, limit, source, contains, and sinceSequence, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads recent or incremental lines from a live Apple log capture session, which precisely distinguishes it from sibling tools that list, start, or stop sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as starting a session first or reading from a different source. The description only states the action without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_start_live_logsB
Start a live Apple app log capture session. Console captures print/stdout/stderr; unified captures OSLog where supported.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | Device identifier, UDID, name, or 'booted' for simulators. | |
| target | Yes | ||
| streams | No | ||
| bundleId | Yes | Application bundle identifier, for example com.mstudio.play. | |
| predicate | No | Additional NSPredicate clause OR-ed into the unified log predicate. | |
| processName | No | Optional process name for unified log predicate. | |
| terminateExisting | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that unified captures OSLog 'where supported,' but does not disclose side effects, blocking behavior, session lifecycle, authentication needs, or rate limits. The description is insufficient for a tool that starts a live session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, with no fluff. The first sentence states the purpose, and the second explains the stream types. It is front-loaded and efficient, though a bit more structure (e.g., bullet points for parameters) could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 7 parameters, no output schema, and no annotations, the description is insufficient. It does not explain the session lifecycle (e.g., that sessions need to be stopped later), return values, or how sessions are identified. The description lacks critical context for an agent to effectively use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 57% schema description coverage, the description adds minimal meaning beyond the schema. It mentions 'console' and 'unified' streams but does not explain parameters like predicate, processName, terminateExisting, or their effects. The schema provides some descriptions, but the description does not enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a live Apple app log capture session and distinguishes between console and unified streams. It differentiates from sibling tools like apple_list_devices, apple_list_log_sessions, apple_read_live_logs, and apple_stop_live_logs by specifying the action of starting a session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that console captures print/stdout/stderr and unified captures OSLog where supported, but does not provide explicit guidance on when to use this tool versus alternatives or when to choose console vs unified streams. The context of use is implied but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_stop_live_logsC
Stop a live Apple log capture session.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral aspects such as whether logs are saved or discarded upon stopping, whether the operation is reversible, or any authentication requirements. With no annotations, more detail is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the key action. However, it could be slightly expanded without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description does not mention the relationship with apple_start_live_logs or where sessionId comes from. For a tool with one parameter and no output schema, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description fails to explain the sessionId parameter, including how to obtain it or its expected format. With 0% schema coverage, this is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'stop' and the resource 'live Apple log capture session', which distinguishes it from sibling tools like apple_start_live_logs (start) and apple_read_live_logs (read).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites (e.g., must have an active session from apple_start_live_logs) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
apple_list_devices - First observed
apple_list_log_sessions - First observed
apple_read_live_logs - First observed
apple_start_live_logs - First observed
apple_stop_live_logs
TDQS
Scored across 5 tools
Each tool has a distinct purpose: listing devices, and managing log sessions with separate start, stop, list, and read operations. No overlap or ambiguity.
All tools follow a consistent 'apple_verb_noun' snake_case pattern (e.g., apple_list_devices, apple_start_live_logs). Perfect uniformity.
Five tools is an appropriate size for a focused log management server, covering essential operations without being overbearing.
The server covers the core lifecycle of log sessions (list, start, read, stop) and device enumeration. Minor gaps like log filtering or configuration are missing, but the main workflow is supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Syslog receiver and MCP server for homelab log intelligence.
Syslog receiver and MCP server for homelab log intelligence.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn MCP server to control iOS Simulators.1353MIT
- AlicenseNot gradedqualityDmaintenanceMCP server and CLI for iOS development — build, test, automate, and diagnose from any AI agent or terminal.1MIT
- AlicenseAqualityDmaintenanceAn MCP server for streaming and searching macOS Console.app and iOS device logs, enabling real-time log access and debugging through natural language.1462MIT
- FlicenseCqualityCmaintenanceLocal macOS MCP server and setup app for Apple apps193-