mac_forensics-mcp
Provides tools for forensic analysis of macOS systems, including user account forensics, file activity tracking, security event detection, and cross-artifact correlation from triage collections.
Enables extraction of Safari browsing history and search queries from Safari's database.
Allows searching the Spotlight index for file metadata and retrieving index statistics.
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., "@mac_forensics-mcpsearch for failed authentication events in the last 24 hours"
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.
mac_forensics-mcp
MCP (Model Context Protocol) server for macOS Digital Forensics and Incident Response (DFIR).
Overview
This MCP server provides structured forensic analysis tools for macOS triage collections, reducing context overhead when investigating incidents with LLMs.
Key Benefits:
Structured queries instead of raw grep through massive files
Automatic timestamp normalization (Mac Absolute Time → UTC)
Pre-built security event detection patterns
Cross-artifact correlation and timeline building
Pagination to avoid context overflow
Artifact discovery to know what's available
23 tools covering: Unified Logs, FSEvents, Spotlight, Plists, SQLite databases, Extended Attributes, System Logs, and more.
Related MCP server: SIFTAgent
Installation
cd /opt/macOS/mac_forensics-mcp
# Create virtual environment and install dependencies
uv venv
uv pip install -e .Claude Code Configuration
Option 1: Using claude mcp add (Recommended)
# Add to user settings (available in all projects)
claude mcp add mac-forensics -s user -- /opt/macOS/mac_forensics-mcp/.venv/bin/python -m mac_forensics_mcp.server
# Or add to current project only
claude mcp add mac-forensics -- /opt/macOS/mac_forensics-mcp/.venv/bin/python -m mac_forensics_mcp.serverTo verify it was added:
claude mcp listTo remove:
claude mcp remove mac-forensics -s userOption 2: Manual JSON Configuration
Add to ~/.claude/settings.json (user-level) or .claude/settings.json (project-level):
{
"mcpServers": {
"mac-forensics": {
"command": "/opt/macOS/mac_forensics-mcp/.venv/bin/python",
"args": ["-m", "mac_forensics_mcp.server"],
"env": {}
}
}
}Available Tools (23)
Discovery
Tool | Description |
| Discover available artifacts in a triage collection |
Unified Logs
Tool | Description |
| Search logs with regex, filters, time range |
| Get pre-defined security events (user_created, ssh_session, etc.) |
| Get log statistics: time range, top subsystems |
Plist Files
Tool | Description |
| Read and parse plist, optionally extract key path |
| Search for keys matching pattern |
| Extract all timestamp values with UTC conversion |
Databases
Tool | Description |
| App usage from KnowledgeC.db |
| Safari browsing history |
| Extract search queries from Safari |
| TCC permissions (camera, mic, screen recording) |
| File download history |
User Analysis
Tool | Description |
| List users including deleted accounts |
| Build timeline for specific user account |
FSEvents
Tool | Description |
| Search file system events (create, delete, modify, rename) |
| Get FSEvents statistics |
Extended Attributes & Spotlight
Tool | Description |
| Get xattr for file (quarantine, download URL, etc.) |
| Search Spotlight index for file metadata |
| Get Spotlight index statistics |
System Logs
Tool | Description |
| Parse fsck_apfs.log for volume creation, external devices, anti-forensics |
| Get fsck_apfs.log statistics: devices, volumes, time range |
Correlation & Investigation
Tool | Description |
| Build unified timeline from multiple artifacts |
| Deep investigation with evidence correlation |
Security Event Types
The mac_unified_logs_security_events tool supports these event types:
Event Type | Description |
| User account creation |
| User account deletion |
| User account changes |
| SSH connections |
| Sudo command execution |
| Successful authentication |
| Failed authentication |
| Process execution |
| Gatekeeper/quarantine events |
| TCC permission prompts |
| User login |
| User logout |
| Screen lock events |
| Screen unlock events |
| Remote Login service |
| Persistence mechanisms |
Investigation Event Types
The mac_investigate_event tool supports deep investigation of these event types:
Event Type | Description |
| Investigate user account deletion with timeline and evidence correlation |
| Investigate user account creation |
| Investigate file downloads (quarantine, xattr, browser history) |
| Investigate SSH session activity |
| Investigate potential malware execution |
| Investigate privilege escalation attempts |
Usage Examples
Discover artifacts in a triage
mac_list_artifacts(artifacts_dir="/path/to/triage")Find user deletion events
mac_unified_logs_security_events(
log_path="/path/to/unified_logs.csv",
event_type="user_deleted"
)Deep investigation of user deletion
mac_investigate_event(
artifacts_dir="/path/to/triage",
event_type="user_deletion",
target="username"
)Get Safari search history
mac_safari_searches(
db_path="/path/to/History.db",
query_filter="delete"
)Read deleted users from plist
mac_plist_read(
plist_path="/path/to/com.apple.preferences.accounts.plist",
key_path="deletedUsers"
)Find external device activity
mac_parse_fsck_apfs_log(
log_path="/path/to/fsck_apfs.log",
external_only=True
)Search for specific volume
mac_parse_fsck_apfs_log(
log_path="/path/to/fsck_apfs.log",
volume_filter="suspicious_volume"
)Build user activity timeline
mac_get_user_timeline(
artifacts_dir="/path/to/triage",
username="username"
)Search FSEvents for file activity
mac_fsevents_search(
fseventsd_path="/path/to/.fseventsd",
path_filter="/Users/username",
event_types=["created", "deleted"]
)Configuration
External Tool Paths
External forensic tools can be configured via environment variables. If not set, defaults to /opt/macOS/ paths.
Environment Variable | Default | Description |
|
| Path to unifiedlog_iterator binary |
|
| Path to FSEParser script |
|
| Path to spotlight_parser script |
Example with custom paths:
{
"mcpServers": {
"mac-forensics": {
"command": "/opt/macOS/mac_forensics-mcp/.venv/bin/python",
"args": ["-m", "mac_forensics_mcp.server"],
"env": {
"MAC_FORENSICS_UNIFIEDLOG_ITERATOR_PATH": "/custom/path/unifiedlog_iterator",
"MAC_FORENSICS_FSEPARSER_PATH": "/custom/path/FSEParser.py",
"MAC_FORENSICS_SPOTLIGHT_PARSER_PATH": "/custom/path/spotlight_parser.py"
}
}
}
}Dependencies
Python 3.10+
uv (for virtual environment and package management)
mcp >= 1.0.0
biplist (optional, for malformed plists)
External tools (optional, for parsing raw artifacts):
unifiedlog_iterator- for parsing .logarchive bundlesFSEParser- for parsing FSEvents (.fseventsd)spotlight_parser- for parsing Spotlight indexes
Architecture
mac_forensics_mcp/
├── server.py # MCP server and tool definitions
├── config.py # Configurable external tool paths
├── parsers/
│ ├── plist_parser.py # Plist file parsing
│ ├── unified_log_parser.py # Unified log analysis
│ ├── sqlite_parser.py # SQLite databases (KnowledgeC, Safari, TCC)
│ ├── fsevents_parser.py # FSEvents parsing
│ ├── spotlight_parser.py # Spotlight index parsing
│ ├── xattr_parser.py # Extended attributes parsing
│ └── fsck_apfs_parser.py # fsck_apfs.log parsing
├── correlation/
│ ├── timeline_builder.py # Cross-artifact timeline correlation
│ └── event_investigator.py # Event-specific investigation
└── utils/
├── timestamps.py # Mac/WebKit/HFS timestamp conversion
└── discovery.py # Artifact discoveryForensic Value
This MCP server was developed based on real-world macOS DFIR investigations. Key forensic capabilities:
Capability | Tools |
User account forensics |
|
File activity tracking |
|
Download analysis |
|
Security event detection |
|
External device detection |
|
Cross-artifact correlation |
|
References
Contributing
Based on lessons learned from macOS DFIR investigations. Additional tools and event patterns welcome.
Author
xtk
Built for the DFIR community.
Available Tools
23 toolsmac_build_timelineB
Build a unified timeline from multiple forensic artifacts. Correlates events from unified logs, Safari history, KnowledgeC, and plists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| keyword | No | Optional keyword to filter across all sources | |
| sources | No | Sources to include: unified_logs, safari, knowledgec, plists | |
| time_end | No | ISO datetime - end of time window | |
| time_start | No | ISO datetime - start of time window | |
| artifacts_dir | Yes | Path to triage collection root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only mentions correlation without explaining behavioral traits such as deduplication, output format, or whether it is read-only. This leaves the agent uncertain about side effects and how results are structured.
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 only two sentences, with the purpose stated clearly in the first. No redundant information or unnecessary details.
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 correlating multiple sources and the lack of output schema, the description is too minimal. It does not explain how results are presented, performance implications, or prerequisites. More detail is needed for effective use.
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 high (83%), so the schema already documents most parameters. The description adds context about correlating events but does not provide additional meaning beyond what the schema offers.
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 uses a specific verb ('Build') and resource ('unified timeline'), and lists the types of artifacts it correlates. This clearly distinguishes it from sibling tools that focus on single artifact types.
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 the tool is for building a combined timeline, but does not explicitly state when to use it versus alternatives (e.g., using individual artifact tools). No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_fsck_apfs_statsA
Get statistics about fsck_apfs.log: devices checked, volumes found, external devices, time range.
| Name | Required | Description | Default |
|---|---|---|---|
| log_path | Yes | Path to fsck_apfs.log file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states it 'gets statistics' which implies read-only, but does not disclose potential side effects, permissions, or performance characteristics.
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?
Single sentence is concise and front-loaded, but could include a brief note on the output format 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?
No output schema exists, so the description should hint at return structure. Current description lists statistics content but lacks details on format (e.g., JSON keys, pagination). Adequate but not complete.
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%, but description adds no extra meaning beyond pointing to the log file path. Baseline of 3 is appropriate.
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?
Clearly identifies the tool as retrieving statistics from fsck_apfs.log and lists the types of statistics (devices, volumes, external devices, time range). Distinguishes from sibling mac_parse_fsck_apfs_log which likely parses full details.
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?
Description implies use for statistics on the log but does not explicitly state when to choose this over alternatives like mac_parse_fsck_apfs_log.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_fsevents_searchC
Search FSEvents records for file system activity. Shows file creation, deletion, modification, and rename operations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| time_end | No | ISO datetime - filter events before this time (approximate) | |
| time_start | No | ISO datetime - filter events after this time (approximate) | |
| event_types | No | Filter by event types: created, deleted, modified, renamed, mount, permission | |
| path_filter | No | Filter by full path (substring match) | |
| fseventsd_path | Yes | Path to .fseventsd directory or pre-parsed SQLite database | |
| filename_filter | No | Filter by filename (substring match) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the tool searches and shows operations, omitting details such as performance implications, required permissions, or side effects. The schema provides some filtering context, but the description adds no extra transparency.
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, but it is too brief for a tool with 8 parameters. While not bloated, it sacrifices useful detail. A more structured description could improve clarity without adding length.
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's complexity (multiple filtering options, no output schema), the description is incomplete. It does not explain the return format, whether results are paginated, or how filtering interacts. The mention of event types gives a clue, but the overall context is insufficient for effective use.
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 description coverage is 75%, but the tool description adds no additional meaning to parameters. Two parameters (limit and offset) lack schema descriptions and are not explained in the text. The description only reiterates the general purpose without clarifying how parameters affect behavior.
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 searches FSEvents records for file system activity and lists specific event types (created, deleted, modified, renamed). This explicitly distinguishes it from siblings like mac_fsevents_stats or mac_investigate_event, which focus on statistics or deeper analysis.
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 given on when to use this tool vs alternatives like mac_unified_logs_search or mac_spotlight_search. The description does not mention prerequisites, limitations, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_fsevents_statsB
Get statistics about FSEvents records: total count, time range, event type counts.
| Name | Required | Description | Default |
|---|---|---|---|
| fseventsd_path | Yes | Path to .fseventsd directory or pre-parsed SQLite database |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states what the tool returns, but does not mention whether it reads or modifies data, performance implications, authentication requirements, or potential 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?
The description is succinct, using a single sentence that front-loads the tool's purpose. No unnecessary words, but could benefit from slightly more structure, such as listing the output components explicitly.
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 one parameter and no output schema, the description provides a high-level overview of the output (count, time range, event type counts) but lacks detail on the format, specific event types, or any limitations. It is adequate but not exhaustive.
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 single parameter fseventsd_path is fully described in the input schema (100% coverage). The description does not add additional meaning beyond the schema, so the baseline score of 3 is appropriate.
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 retrieves statistics about FSEvents records, specifying the outputs: total count, time range, and event type counts. It uniquely differentiates from sibling tools like mac_fsevents_search by focusing on aggregate data.
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 obtaining summary statistics, but provides no explicit guidance on when to use this tool versus alternatives like mac_fsevents_search. It lacks context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_get_extended_attributesA
Get extended attributes (xattr) for a file. Contains true download times, quarantine info, and user-action dates more accurate than DB records.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max files to return (for directory scans) | |
| file_path | Yes | Path to file or directory to scan | |
| recursive | No | Scan directory recursively |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions output content but does not disclose read-only nature, error behavior, or performance impact. Adequate but not thorough.
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?
Two sentences, front-loaded with core function, no redundant or wasted words. Highly efficient.
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?
Description covers output value but omits directory scanning capability (handled by params). Lacks comparison to siblings or output schema. Moderately complete for a simple 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?
Schema coverage is 100%, so baseline is 3. Description adds no additional parameter context beyond what schema already provides.
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 'Get extended attributes (xattr) for a file' with specific verb and resource, and highlights valuable data (download times, quarantine info). It distinguishes from sibling tools that focus on timelines or logs.
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 a use case (when accurate timestamps are needed) but provides no explicit guidance on when to use this tool vs alternatives like mac_quarantine_events or mac_spotlight_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_get_user_accountsB
Get user accounts from a triage collection, including deleted users.
| Name | Required | Description | Default |
|---|---|---|---|
| artifacts_dir | Yes | Path to triage collection root | |
| include_deleted | No | Include deleted user accounts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose behavioral traits like read-only operation or permissions required. It only states the function without any behavioral context.
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 without redundancy. It could benefit from structured explanation of parameters or return values, but it is not 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?
Given no output schema, the description should indicate what fields or data are returned. It only mentions 'user accounts' which is vague for an agent to know what to expect.
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%, so baseline is 3. The description adds little beyond the schema: 'including deleted users' mirrors the include_deleted parameter description. No additional meaning for artifacts_dir.
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 gets user accounts from a triage collection and explicitly mentions including deleted users, which distinguishes it from sibling tools like mac_get_user_timeline that likely focus on user activities.
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 mac_get_user_timeline or mac_list_artifacts. The description lacks context-specific usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_get_user_timelineC
Build a timeline for a specific user account. Shows account creation, modification, deletion, and related activity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| time_end | No | ISO datetime - end of time window | |
| username | Yes | Username to investigate | |
| time_start | No | ISO datetime - start of time window | |
| artifacts_dir | Yes | Path to triage collection root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It only states what the tool shows (account events) but not whether it modifies data, performance considerations, or dependencies (e.g., artifacts_dir must point to valid collection). This is insufficient for safe agent usage.
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?
Two sentences, front-loaded with the action verb 'Build'. Every word contributes meaning. No redundancy or filler.
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?
No output schema exists, so the description should explain what the timeline output contains (e.g., list of events, format). It only mentions 'related activity' vaguely. Key details like the chronological ordering or event structure are missing, leaving the agent uncertain about the return value.
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 80% (4 of 5 parameters have descriptions). The description adds no additional parameter semantics beyond what the schema already provides. The limit parameter lacks a description, but the tool description does not compensate. Baseline of 3 applies as schema does most of the work.
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 states 'Build a timeline for a specific user account' and specifies the types of activities (creation, modification, deletion, related). This is a clear verb-resource combination, but it does not explicitly differentiate from sibling tools like mac_build_timeline or mac_get_user_accounts.
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. There is no mention of prerequisites, limitations, or when not to use it. The agent receives no help in selecting this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_investigate_eventB
Deep investigation of a specific event type. Correlates evidence across multiple artifacts. Event types: user_deletion, user_creation, file_download, ssh_session, malware_execution, privilege_escalation.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Target of investigation (username, filename, IP, etc.) | |
| event_type | Yes | Type of event to investigate | |
| artifacts_dir | Yes | Path to triage collection root | |
| time_window_hours | No | Hours around event to search for context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'correlates evidence' but does not disclose behavioral traits such as output format, side effects, read-only nature, or whether it modifies artifacts. The agent lacks critical information for safe invocation.
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?
Two sentences, zero wasted words. Front-loaded with the core purpose, then lists event types. Efficient and clear.
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 4-parameter tool with no output schema, the description is too sparse. It fails to explain what 'correlates evidence' means in practice, what the return value contains, or how time_window_hours is used. A deep investigation tool should provide richer behavioral context.
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%, but the description adds no meaning beyond the parameter names and types. It lists event types in the description, but the schema already enumerates them via enum. No additional syntax, formatting, or constraints provided.
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?
Description clearly states it performs deep investigation of specific event types and correlates evidence across multiple artifacts. The listed event types provide concrete scope. This distinguishes it from sibling tools that focus on single data sources (e.g., mac_unified_logs_search) by describing cross-artifact correlation.
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 use when deep correlation is needed, but does not explicitly state when to use this tool vs. alternatives (e.g., for single-source queries, use more specific tools). No guidance on prerequisites 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.
mac_knowledgec_app_usageB
Get application usage data from KnowledgeC.db. Shows what apps were used and when.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| db_path | Yes | Path to knowledgeC.db | |
| app_name | No | Filter by app name/bundle ID (substring match) | |
| time_end | No | ISO datetime - filter before this time | |
| time_start | No | ISO datetime - filter after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only says 'Shows what apps were used and when' without disclosing behaviors like required permissions, database accessibility, or potential performance impacts. Minimal behavioral disclosure.
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?
Two sentences with zero waste. First sentence states purpose, second describes output. Efficiently structured and front-loaded.
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 5 parameters, no output schema, and no annotations, the description provides basic understanding but lacks details on output format, row limits, ordering, or data field names. Adequate but incomplete.
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 description coverage is 80% (4 of 5 parameters have descriptions), so baseline is 3. Description adds no parameter-level detail beyond schema, such as limit semantics or filter inclusivity, but schema already covers parameter purposes.
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?
Description clearly states the verb 'Get' and the specific resource 'application usage data from KnowledgeC.db', and differentiates from sibling tools like mac_safari_history or mac_unified_logs_search by naming the exact database and data type.
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 on when to use this tool versus alternatives, no mention of prerequisites or limitations. The description only states function without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_list_artifactsB
Discover available forensic artifacts in a macOS triage collection. Returns inventory of logs, databases, plists, and user profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| artifacts_dir | Yes | Path to the triage collection root directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not mention read-only or destructive nature. It implies a safe listing operation by stating 'returns inventory,' but lacks explicit behavioral context such as whether it modifies the collection or requires special permissions.
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?
Two short sentences that front-load the purpose and list example output categories. No extraneous text. Slight deduction for not using bullet points or structured formatting to enhance scanability.
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's simplicity (one parameter, no required output schema), the description is adequate but lacks details on return format, scope of artifacts covered, or performance considerations. It describes what it does but not enough for an agent to fully anticipate behavior.
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% for the single parameter artifacts_dir, which is described as 'Path to the triage collection root directory.' The tool description adds no additional semantics beyond the schema. Baseline score is appropriate.
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 'Discover available forensic artifacts in a macOS triage collection' with specific examples like 'logs, databases, plists, and user profiles.' However, it does not contrast with sibling tools, which are more specialized (e.g., mac_plist_read, mac_safari_history), so the distinction is implied but not explicit.
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 on when to use this tool versus alternatives. It does not specify prerequisites, limitations, or when to choose a more specific sibling tool like mac_plist_read or mac_safari_history. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_parse_fsck_apfs_logB
Parse fsck_apfs.log to find volume creation, external device connections, and anti-forensics activity. Shows APFS volume formatting operations with timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| log_path | Yes | Path to fsck_apfs.log file | |
| time_end | No | ISO datetime - filter operations before this time | |
| time_start | No | ISO datetime - filter operations after this time | |
| errors_only | No | Only show operations with errors | |
| device_filter | No | Filter by device path (e.g., 'rdisk4') | |
| external_only | No | Only show external device operations (rdisk2+) | |
| volume_filter | No | Filter by volume name (substring match) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It indicates that the tool parses a log file and shows operations with timestamps, implying a read-only operation. However, it does not explicitly state that it is non-destructive, mention permission requirements, or describe any side effects. This is adequate but not comprehensive.
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 extremely concise—two sentences totaling 24 words. It is front-loaded, with the first sentence stating the core purpose and the second adding specific output details. Every word earns its place, and there is no redundancy or unnecessary information.
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's complexity (8 parameters, 1 required) and the absence of an output schema, the description should provide more information about return values, format, or limitations. It only vaguely states 'Shows APFS volume formatting operations with timestamps,' leaving the agent uninformed about the structure of the results, pagination, or error handling. This is insufficient for a forensic tool with many filtering options.
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 description coverage is high (88%), so the baseline is 3. The description only mentions the log file ('fsck_apfs.log'), which maps to the required 'log_path' parameter, but provides no additional context for the other seven parameters (e.g., filtering, limits). It does not enhance the schema's meaning beyond what is already documented in the input schema.
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 that the tool parses fsck_apfs.log to find specific activities like volume creation, external device connections, and anti-forensics activity. It uses a specific verb ('parse') and a well-defined resource (the log file), and it distinguishes itself from siblings by focusing on forensic extraction rather than statistics or other log parsing.
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 does not provide any guidance on when to use this tool versus alternatives (e.g., mac_fsck_apfs_stats). It lacks explicit when-to-use or when-not-to-use instructions, leaving the agent to infer appropriate context from the tool name and siblings alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_plist_readB
Read and parse a macOS plist file. Optionally extract specific key path.
| Name | Required | Description | Default |
|---|---|---|---|
| key_path | No | Optional dot-notation path (e.g., 'deletedUsers.0.date') | |
| plist_path | Yes | Path to the plist file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states 'read and parse' implying no destructive behavior, but does not specify permissions, output format, or error handling. Minimal disclosure.
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?
Two concise sentences front-loading the purpose. No extraneous 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 tool with 2 parameters and no output schema, the description is adequate but lacks details on return type or error conditions. Could improve completeness with result 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% with descriptions for both parameters. The description adds only 'dot-notation path' which is already in the schema. Baseline score of 3 applies.
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 'Read and parse' and the resource 'macOS plist file', with optional key path extraction. It distinguishes from siblings like mac_plist_search and mac_plist_timestamps.
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 on when to use this tool vs alternatives such as mac_plist_search or mac_plist_timestamps. The description does not mention context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_plist_searchC
Search for keys matching a pattern across a plist file.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Search pattern for key names (case-insensitive) | |
| plist_path | Yes | Path to the plist file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the basic action, omitting details like whether it returns paths, values, or just key names, and any side effects or permissions 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 conveys the core purpose without extraneous information. It is efficient but could be slightly more structured.
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 no output schema and the tool's simplicity, the description is too minimal. It does not explain return format, error behavior, or how results are presented, leaving gaps for effective usage.
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% with each parameter described. The description adds no additional meaning beyond the schema, so it meets the baseline expectation.
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 it searches for keys matching a pattern in a plist file. This distinguishes it from sibling tools like 'mac_plist_read' which likely reads values, but it does not explicitly differentiate.
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 'mac_plist_read' or other search tools. The description lacks context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_plist_timestampsB
Extract all timestamp values from a plist file with UTC conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| plist_path | Yes | Path to the plist file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full behavioral burden. It only states extraction and UTC conversion, but omits details like error handling, output format, or what happens with missing/invalid files.
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 sentence with no unnecessary words. It is concise and front-loaded with the key purpose. Slightly more detail could improve clarity without sacrificing conciseness.
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?
No output schema exists, so the description should explain return format or structure. It only says 'extract all timestamp values' without specifying how results are presented (e.g., array, dict, file path). For a data extraction tool, this is incomplete.
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% with one parameter well-described. The description adds 'UTC conversion' which is operational context, not parameter-level detail. No additional meaning beyond schema.
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 (extract), the resource (timestamp values from a plist file), and includes a key distinguishing feature (UTC conversion). This sets it apart from siblings like mac_plist_read and mac_plist_search.
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 on when to use this tool versus alternatives, such as mac_plist_read or mac_plist_search. The description does not specify prerequisites or context like file format assumptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_quarantine_eventsA
Get quarantine events (file downloads) from QuarantineEventsV2. Shows download source, app that downloaded, timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| db_path | Yes | Path to QuarantineEventsV2 database | |
| time_end | No | ISO datetime - filter before this time | |
| time_start | No | ISO datetime - filter after this time | |
| filename_filter | No | Filter by filename |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It implies a read-only operation by stating 'Get quarantine events' and mentions the database source, but does not explicitly confirm non-destructive behavior, auth requirements, 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?
The description is a single concise sentence that front-loads the tool's purpose and key data fields. It contains no unnecessary words or fluff.
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 tool with 5 parameters and no output schema, the description provides basic purpose and output hints but omits usage guidance and behavioral details. Adequate but could be more complete given the lack of annotations.
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 description coverage is 80%, so the baseline is 3. The description adds minor output context but does not elaborate on parameter usage beyond what the schema provides.
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's purpose: retrieving quarantine events (file downloads) from QuarantineEventsV2. It specifies the data shown (download source, app, timestamp), making it distinct from sibling tools like mac_fsevents_search or mac_safari_history.
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 provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. It lacks any explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_safari_historyB
Get Safari browsing history with timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| db_path | Yes | Path to Safari History.db | |
| time_end | No | ISO datetime - filter before this time | |
| time_start | No | ISO datetime - filter after this time | |
| url_filter | No | Filter by URL (substring) | |
| title_filter | No | Filter by page title (substring) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fails to mention behavioral traits such as read-only nature, required permissions, or error handling beyond what is implied.
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?
One sentence with no fluff. Could be expanded with more critical details without harming conciseness, but as is it is efficient.
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?
With 6 parameters and no output schema, the description is minimal. It lacks details on return format, error scenarios, and rationale for the required db_path parameter.
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 description coverage is high (83%), so the schema already explains most parameters. The description adds no extra meaning or context beyond the schema.
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?
Description clearly states the action (Get), resource (Safari browsing history), and outcome (with timestamps). Distinguishes from sibling tools like mac_safari_searches.
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 on when to use this tool versus alternatives, nor any context on prerequisites or restrictions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_safari_searchesB
Extract search queries from Safari history (Google, Bing, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| db_path | Yes | Path to Safari History.db | |
| time_end | No | ISO datetime - filter before this time | |
| time_start | No | ISO datetime - filter after this time | |
| query_filter | No | Filter search queries (substring) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, required permissions, or dependencies like file access to History.db.
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 immediately conveys the tool's purpose without extraneous 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 lacks details about output format, prerequisites, performance implications, or the fact that it queries a SQLite database. Given no output schema, more context would be beneficial.
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 description coverage is 80%, so the schema already provides parameter details. The description adds no additional semantics beyond the schema's parameter descriptions.
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 (extract) and the resource (search queries from Safari history), and implicitly distinguishes from the sibling tool mac_safari_history by focusing on queries rather than full history.
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 on when to use this tool versus alternatives like mac_safari_history, nor any conditions or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_spotlight_searchB
Search Spotlight index for file metadata. Contains info even for deleted files.
| Name | Required | Description | Default |
|---|---|---|---|
| inode | No | Find file by inode number | |
| limit | No | ||
| offset | No | ||
| filename | No | Filter by filename (substring) | |
| time_end | No | ISO datetime - filter before this time | |
| time_start | No | ISO datetime - filter after this time | |
| content_type | No | Filter by content type (e.g., 'public.executable') | |
| path_contains | No | Filter by path substring | |
| spotlight_path | Yes | Path to .store.db or .Spotlight-V100 directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions that deleted files are included, but does not disclose read-only nature, permission requirements, or potential side effects. This is insufficient for a search tool.
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?
Two sentences with no wasted words. The action is front-loaded. Ideal length for a simple search tool.
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?
Despite 9 parameters and no output schema, the description omits crucial context like return format, ordering, or pagination behavior. The note about deleted files is helpful but insufficient for comprehensive understanding.
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 description coverage is high (78%), and the description adds no further parameter details. The baseline of 3 is appropriate as the schema already documents parameters adequately.
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 searches the Spotlight index for file metadata and highlights that it includes deleted files, which is a key differentiator. It is distinct from sibling tools like mac_spotlight_stats.
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. There is no mention of prerequisites, limitations, or complementary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_spotlight_statsB
Get statistics about a Spotlight index: total entries, content types, top directories.
| Name | Required | Description | Default |
|---|---|---|---|
| spotlight_path | Yes | Path to .store.db or .Spotlight-V100 directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states it retrieves statistics, but does not mention any side effects, permissions, or performance implications. A read-only nature is implied but not explicit.
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?
Single sentence with no wasted words. Front-loaded with the verb and resource, and specifies the output categories concisely.
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 statistics tool with one parameter and no output schema, the description adequately states what is returned. It could be improved by mentioning the output format or any limitations, but it is generally sufficient.
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% with one parameter fully described. The description adds the same information as the schema ('Path to .store.db or .Spotlight-V100 directory'), so it provides no additional meaning. Baseline 3 is appropriate.
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 'Get', the resource 'statistics about a Spotlight index', and lists specific information retrieved ('total entries, content types, top directories'). It differentiates from sibling tool 'mac_spotlight_search' which searches the index.
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 on when to use this tool versus alternatives like mac_spotlight_search or other sibling tools. The description implies it's for statistics but provides no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_tcc_permissionsB
Get TCC (Transparency, Consent, Control) permissions. Shows which apps have camera, mic, screen recording access.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| client | No | Filter by app bundle ID | |
| db_path | Yes | Path to TCC.db | |
| service | No | Filter by service (e.g., 'ScreenCapture', 'Microphone') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral transparency. It implies a read operation by saying 'Get' and 'Shows', but it does not explicitly state that it is read-only, non-destructive, or any auth requirements. The agent lacks clarity on side effects or permissions 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 brief with two sentences. The first sentence introduces the purpose, and the second provides concrete examples. It is efficient and front-loaded, though a more structured format (e.g., listing key features) could improve scannability.
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's complexity (4 parameters, no output schema, no annotations), the description is insufficient. It does not explain the return format, pagination via 'limit', or how filtering works. The agent lacks enough context to use the tool effectively without additional experimentation.
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 description coverage is 75%, so the baseline is 3. The description adds context about specific services (camera, mic, screen recording) that map to the 'service' parameter, enhancing understanding. However, it does not explain the 'limit' parameter or other nuances beyond the schema.
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 it gets TCC permissions and lists specific examples (camera, mic, screen recording). The verb 'Get' and resource 'TCC permissions' are specific and distinguish it from sibling tools like mac_unified_logs_search or mac_quarantine_events.
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 provides no guidance on when to use this tool versus other macOS tools or when not to use it. No exclusions, prerequisites, or alternatives are mentioned, leaving the agent to infer usage from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_unified_logs_searchB
Search macOS Unified Logs with filters. Supports regex patterns, subsystem/category/process filters, and time ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | Search pattern (regex supported) | |
| offset | No | Skip first N results for pagination | |
| process | No | Filter by process name | |
| log_path | Yes | Path to unified_logs.csv or .logarchive bundle | |
| time_end | No | ISO datetime - filter events before this time | |
| subsystem | No | Filter by subsystem (e.g., 'com.apple.opendirectoryd') | |
| time_start | No | ISO datetime - filter events after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the tool searches logs but does not clarify whether it is read-only, requires special permissions, or has performance implications. The lack of details on side effects or return behavior leaves agents uninformed.
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 two sentences with no wasted words. It front-loads the core action and then lists key features, making it efficient for an agent to parse.
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 8 parameters, no output schema, and several sibling tools, the description is adequate but not complete. It does not describe the output format (e.g., list of log entries), pagination behavior (limit/offset documented in schema but not in description), or how to interpret results. More context on the tool's return value would improve completeness.
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%, so the baseline is 3. The description adds value by noting regex support and listing filter types (subsystem, process, time ranges), which maps to several parameters. However, mentioning 'category' (not in schema) slightly detracts. Overall, it doesn't greatly exceed baseline.
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 'Search macOS Unified Logs with filters' and enumerates specific filter capabilities (regex, subsystem, process, time ranges), making the tool's purpose distinct from sibling tools like mac_unified_logs_security_events or mac_unified_logs_stats. However, it mentions 'category' which is not in the schema, causing slight confusion.
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 provides no guidance on when to use this tool versus alternatives. It does not mention scenarios where mac_unified_logs_security_events or mac_unified_logs_stats might be more appropriate, nor does it suggest prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_unified_logs_security_eventsC
Get pre-defined security events from Unified Logs. Event types: user_created, user_deleted, user_modified, ssh_session, sudo_usage, auth_success, auth_failure, process_exec, gatekeeper, tcc_prompt, login, logout, screen_lock, screen_unlock, remote_login, persistence
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| log_path | Yes | Path to unified_logs.csv or .logarchive bundle | |
| time_end | No | ISO datetime - filter events before this time | |
| event_type | Yes | Type of security event to search for | |
| time_start | No | ISO datetime - filter events after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states it retrieves events without disclosing traits like permission requirements, performance impact, or whether it modifies data. Missing behavioral context beyond the action itself.
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?
Two sentences efficiently state purpose and list event types. While not elaborated, there is no fluff. Front-loading is acceptable.
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 6 parameters, no output schema, and no annotations, the description lacks details on return format, pagination, or error handling. Does not specify which fields are returned, leaving the agent underinformed.
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 description coverage is 67%, and description adds only a list of event types already present in the enum. Does not explain time/limit/offset parameters beyond schema, failing to compensate for missing parameter descriptions.
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?
Description specifies the action ('Get pre-defined security events') and resource ('Unified Logs'), lists all supported event types, distinguishing it from the sibling tool `mac_unified_logs_search` which handles arbitrary log search.
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 on when to use this tool over alternatives like `mac_unified_logs_search` or `mac_fsevents_search`. Does not mention prerequisites or context for event selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mac_unified_logs_statsA
Get statistics about a Unified Log file: time range, top subsystems, top processes, total entry count.
| Name | Required | Description | Default |
|---|---|---|---|
| log_path | Yes | Path to unified_logs.csv or .logarchive bundle |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'Get statistics' implying read-only behavior, but does not disclose potential side effects (e.g., no mutation), performance implications (e.g., slow on large files), or any required permissions. Since it's a stats tool, the risk is low, but more transparency 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 extremely concise (10 words) and front-loaded with the verb 'Get' and the resource. Every word contributes meaning, with no waste or redundancy.
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 no output schema, the description lists expected return values (time range, subsystems, processes, count), which is helpful. It could be more complete by mentioning output format (e.g., JSON), but it sufficiently conveys what the tool provides.
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 covers 100% of parameters, with 'log_path' described as 'Path to unified_logs.csv or .logarchive bundle'. The description adds no further parameter details beyond what the schema provides. Baseline score of 3 is appropriate since schema is complete.
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's purpose: 'Get statistics about a Unified Log file' and lists specific statistics (time range, top subsystems, top processes, total entry count). It distinguishes from siblings like mac_unified_logs_search and mac_unified_logs_security_events, which focus on searching or security events.
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 vs alternatives. However, from the context of sibling tools and the description, it is implied that this tool is for aggregated statistics rather than detailed log searching. A brief note on when to prefer this tool over others would improve clarity.
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. Dates show when Glama detected each change.
23 tool updates
v0.1.0- First observed
mac_build_timeline - First observed
mac_fsck_apfs_stats - First observed
mac_fsevents_search - First observed
mac_fsevents_stats - First observed
mac_get_extended_attributes - First observed
mac_get_user_accounts - First observed
mac_get_user_timeline - First observed
mac_investigate_event - First observed
mac_knowledgec_app_usage - First observed
mac_list_artifacts - First observed
mac_parse_fsck_apfs_log - First observed
mac_plist_read - First observed
mac_plist_search - First observed
mac_plist_timestamps - First observed
mac_quarantine_events - First observed
mac_safari_history - First observed
mac_safari_searches - First observed
mac_spotlight_search - First observed
mac_spotlight_stats - First observed
mac_tcc_permissions - First observed
mac_unified_logs_search - First observed
mac_unified_logs_security_events - First observed
mac_unified_logs_stats
TDQS
Each tool targets a distinct forensic artifact or operation (e.g., timeline vs. statistics vs. search), with detailed descriptions that clearly differentiate them. There is no functional overlap or ambiguity.
All tool names follow a uniform 'mac_verb_noun' pattern using snake_case, with verbs like build, get, search, parse, list, etc. No mixing of styles or inconsistent conventions.
With 23 tools, the count is slightly above the typical 3-15 range but justified by the breadth of macOS forensics, covering logs, databases, plists, file system events, and more.
The toolkit covers major forensic artifacts: file system, logs, user accounts, browser history, application usage, permissions, and plists. Includes discovery and correlation tools, leaving no obvious gaps for standard triage.
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
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
111Syslog receiver and MCP server for homelab log intelligence.
Syslog receiver and MCP server for homelab log intelligence.
A paid remote MCP for ClawManager, built to return verdicts, receipts, usage logs, and audit-ready J
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA governed MCP server for digital-forensics and incident-response (DFIR) work, exposing curated forensic tools (Volatility 3, Plaso, RegRipper, etc.) through a single FastMCP HTTP endpoint with bearer-token authentication and tamper-evident audit logging.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that transforms Claude Code into an autonomous DFIR analyst by providing typed, audited forensic tools for disk, memory, timeline, registry, and IOC analysis on the SANS SIFT Workstation.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceA local MCP server that wraps common forensic command-line tools for CTF/forensics competitions into MCP tools, enabling automated analysis of disk images, memory dumps, network captures, SQLite databases, archives, and steganography.1MIT
- AlicenseBqualityBmaintenanceMulti-tier memory forensics MCP server combining a fast Rust engine with Volatility3 coverage for analyzing memory dumps.156MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/x746b/mac_forensics-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server