Skip to main content
Glama
x746b

mac_forensics-mcp

by x746b

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.server

To verify it was added:

claude mcp list

To remove:

claude mcp remove mac-forensics -s user

Option 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

mac_list_artifacts

Discover available artifacts in a triage collection

Unified Logs

Tool

Description

mac_unified_logs_search

Search logs with regex, filters, time range

mac_unified_logs_security_events

Get pre-defined security events (user_created, ssh_session, etc.)

mac_unified_logs_stats

Get log statistics: time range, top subsystems

Plist Files

Tool

Description

mac_plist_read

Read and parse plist, optionally extract key path

mac_plist_search

Search for keys matching pattern

mac_plist_timestamps

Extract all timestamp values with UTC conversion

Databases

Tool

Description

mac_knowledgec_app_usage

App usage from KnowledgeC.db

mac_safari_history

Safari browsing history

mac_safari_searches

Extract search queries from Safari

mac_tcc_permissions

TCC permissions (camera, mic, screen recording)

mac_quarantine_events

File download history

User Analysis

Tool

Description

mac_get_user_accounts

List users including deleted accounts

mac_get_user_timeline

Build timeline for specific user account

FSEvents

Tool

Description

mac_fsevents_search

Search file system events (create, delete, modify, rename)

mac_fsevents_stats

Get FSEvents statistics

Extended Attributes & Spotlight

Tool

Description

mac_get_extended_attributes

Get xattr for file (quarantine, download URL, etc.)

mac_spotlight_search

Search Spotlight index for file metadata

mac_spotlight_stats

Get Spotlight index statistics

System Logs

Tool

Description

mac_parse_fsck_apfs_log

Parse fsck_apfs.log for volume creation, external devices, anti-forensics

mac_fsck_apfs_stats

Get fsck_apfs.log statistics: devices, volumes, time range

Correlation & Investigation

Tool

Description

mac_build_timeline

Build unified timeline from multiple artifacts

mac_investigate_event

Deep investigation with evidence correlation

Security Event Types

The mac_unified_logs_security_events tool supports these event types:

Event Type

Description

user_created

User account creation

user_deleted

User account deletion

user_modified

User account changes

ssh_session

SSH connections

sudo_usage

Sudo command execution

auth_success

Successful authentication

auth_failure

Failed authentication

process_exec

Process execution

gatekeeper

Gatekeeper/quarantine events

tcc_prompt

TCC permission prompts

login

User login

logout

User logout

screen_lock

Screen lock events

screen_unlock

Screen unlock events

remote_login

Remote Login service

persistence

Persistence mechanisms

Investigation Event Types

The mac_investigate_event tool supports deep investigation of these event types:

Event Type

Description

user_deletion

Investigate user account deletion with timeline and evidence correlation

user_creation

Investigate user account creation

file_download

Investigate file downloads (quarantine, xattr, browser history)

ssh_session

Investigate SSH session activity

malware_execution

Investigate potential malware execution

privilege_escalation

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

MAC_FORENSICS_UNIFIEDLOG_ITERATOR_PATH

/opt/macOS/unifiedlog_iterator

Path to unifiedlog_iterator binary

MAC_FORENSICS_FSEPARSER_PATH

/opt/macOS/FSEventsParser/FSEParser_V4.1.py

Path to FSEParser script

MAC_FORENSICS_SPOTLIGHT_PARSER_PATH

/opt/macOS/spotlight_parser/spotlight_parser.py

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 bundles

  • FSEParser - 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 discovery

Forensic Value

This MCP server was developed based on real-world macOS DFIR investigations. Key forensic capabilities:

Capability

Tools

User account forensics

mac_get_user_accounts, mac_get_user_timeline, mac_investigate_event

File activity tracking

mac_fsevents_search, mac_spotlight_search

Download analysis

mac_quarantine_events, mac_get_extended_attributes

Security event detection

mac_unified_logs_security_events

External device detection

mac_parse_fsck_apfs_log

Cross-artifact correlation

mac_build_timeline, mac_investigate_event

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 tools
mac_build_timelineB

Build a unified timeline from multiple forensic artifacts. Correlates events from unified logs, Safari history, KnowledgeC, and plists.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
keywordNoOptional keyword to filter across all sources
sourcesNoSources to include: unified_logs, safari, knowledgec, plists
time_endNoISO datetime - end of time window
time_startNoISO datetime - start of time window
artifacts_dirYesPath to triage collection root

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
log_pathYesPath to fsck_apfs.log file

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_statsB

Get statistics about FSEvents records: total count, time range, event type counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
fseventsd_pathYesPath to .fseventsd directory or pre-parsed SQLite database

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax files to return (for directory scans)
file_pathYesPath to file or directory to scan
recursiveNoScan directory recursively

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifacts_dirYesPath to triage collection root
include_deletedNoInclude deleted user accounts

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
time_endNoISO datetime - end of time window
usernameYesUsername to investigate
time_startNoISO datetime - start of time window
artifacts_dirYesPath to triage collection root

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesTarget of investigation (username, filename, IP, etc.)
event_typeYesType of event to investigate
artifacts_dirYesPath to triage collection root
time_window_hoursNoHours around event to search for context

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
db_pathYesPath to knowledgeC.db
app_nameNoFilter by app name/bundle ID (substring match)
time_endNoISO datetime - filter before this time
time_startNoISO datetime - filter after this time

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifacts_dirYesPath to the triage collection root directory

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
log_pathYesPath to fsck_apfs.log file
time_endNoISO datetime - filter operations before this time
time_startNoISO datetime - filter operations after this time
errors_onlyNoOnly show operations with errors
device_filterNoFilter by device path (e.g., 'rdisk4')
external_onlyNoOnly show external device operations (rdisk2+)
volume_filterNoFilter by volume name (substring match)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
key_pathNoOptional dot-notation path (e.g., 'deletedUsers.0.date')
plist_pathYesPath to the plist file

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_timestampsB

Extract all timestamp values from a plist file with UTC conversion.

ParametersJSON Schema
NameRequiredDescriptionDefault
plist_pathYesPath to the plist file

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
db_pathYesPath to QuarantineEventsV2 database
time_endNoISO datetime - filter before this time
time_startNoISO datetime - filter after this time
filename_filterNoFilter by filename

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
db_pathYesPath to Safari History.db
time_endNoISO datetime - filter before this time
time_startNoISO datetime - filter after this time
url_filterNoFilter by URL (substring)
title_filterNoFilter by page title (substring)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
db_pathYesPath to Safari History.db
time_endNoISO datetime - filter before this time
time_startNoISO datetime - filter after this time
query_filterNoFilter search queries (substring)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_statsB

Get statistics about a Spotlight index: total entries, content types, top directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
spotlight_pathYesPath to .store.db or .Spotlight-V100 directory

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
clientNoFilter by app bundle ID
db_pathYesPath to TCC.db
serviceNoFilter by service (e.g., 'ScreenCapture', 'Microphone')

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
log_pathYesPath to unified_logs.csv or .logarchive bundle
time_endNoISO datetime - filter events before this time
event_typeYesType of security event to search for
time_startNoISO datetime - filter events after this time

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
log_pathYesPath to unified_logs.csv or .logarchive bundle

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 23 tool updatesv0.1.0
    • First observedmac_build_timeline
    • First observedmac_fsck_apfs_stats
    • First observedmac_fsevents_search
    • First observedmac_fsevents_stats
    • First observedmac_get_extended_attributes
    • First observedmac_get_user_accounts
    • First observedmac_get_user_timeline
    • First observedmac_investigate_event
    • First observedmac_knowledgec_app_usage
    • First observedmac_list_artifacts
    • First observedmac_parse_fsck_apfs_log
    • First observedmac_plist_read
    • First observedmac_plist_search
    • First observedmac_plist_timestamps
    • First observedmac_quarantine_events
    • First observedmac_safari_history
    • First observedmac_safari_searches
    • First observedmac_spotlight_search
    • First observedmac_spotlight_stats
    • First observedmac_tcc_permissions
    • First observedmac_unified_logs_search
    • First observedmac_unified_logs_security_events
    • First observedmac_unified_logs_stats

TDQS

A3.6/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    1
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Multi-tier memory forensics MCP server combining a fast Rust engine with Volatility3 coverage for analyzing memory dumps.
    15
    6
    MIT

Latest Blog Posts

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