Windows Forensics MCP Server
Windows Forensics MCP Server enables Windows DFIR from Linux by parsing, searching, correlating, and timeline-building across native Windows forensic artifacts without a Windows runtime.
Parse and search EVTX logs: stats, security-event queries, attack summaries, event-ID explanations, filters, pagination, and JSONL export.
Analyze registry hives: keys/values, persistence, SAM users, USB history, system/network info, and paginated/exact/regex queries.
Examine execution artifacts: Prefetch, Amcache, SRUM, static PE analysis, and API import/attack-pattern detection.
Reconstruct file-system activity: MFT with ADS/timestomping detection, USN Journal changes, deleted files, and unified timelines.
Investigate user activity: browser history/downloads, LNK files, ShellBags, RecentDocs, and Windows Search EDB parsing.
Analyze API Monitor captures: parse APMX, extract call details, detect patterns, correlate handles, and summarize injection chains.
Hunt IOCs across artifacts and behavioral IoC packs; README also lists YARA, VirusTotal, DiE, PCAP, offline NTDS, and remote WinRM collection.
Run high-level orchestrators for execution proof, user-activity correlation, IOC hunting, and timeline building; ingest Eric Zimmerman CSVs.
Enables forensic analysis of Firefox browser history and downloads to reconstruct user activity on Windows systems.
Click on "Deploy 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., "@Windows Forensics MCP Servershow me failed logon attempts in Security.evtx"
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.
Windows Forensics MCP Server
Windows DFIR from Linux - A comprehensive forensics toolkit designed for Linux environments with no Windows runtime dependencies. Parse Windows artifacts natively, with an optional Rust SIDR sidecar for Windows Search.
Related Projects
mem_forensics-mcp - Unified Memory Forensics MCP Server - Multi-tier engine combining Rust speed with Vol3 coverage
mac_forensics-mcp - macOS DFIR - Unified Logs, FSEvents, Spotlight, Plists, SQLite databases, Extended Attributes
Related MCP server: Self-Assembling Forensic MCP Server
Features
Core Forensics
Category | Capabilities |
EVTX Logs | Compact structured queries, field filters, logon correlation, NTLM summaries, and JSONL export |
Offline NTDS | Query exact SAM accounts, domain SIDs, and trust metadata without credential decryption |
Registry | Analyze SAM, SYSTEM, SOFTWARE, SECURITY, and NTUSER.DAT; paginated queries, normalized FILETIMEs, and USBSTOR/WPD correlation |
Remote Collection | Collect artifacts via WinRM (password or pass-the-hash) |
Execution Artifacts
Category | Capabilities |
PE Analysis | Static analysis with hashes (MD5/SHA1/SHA256/imphash), imports, exports, packer detection |
Prefetch | Execution evidence with run counts, timestamps, loaded files |
Amcache | SHA1 hashes and first-seen timestamps from Amcache.hve |
SRUM | Exact application/time filtering, raw resource counters, network MB/MiB totals, and optional aggregation from SRUDB.dat |
File System Artifacts
Category | Capabilities |
MFT | Master File Table parsing with ADS metadata and timestomping detection |
USN Journal | Change journal for file operations and deleted file recovery |
Timeline | Unified timeline from MFT, USN, Prefetch, Amcache, EVTX |
User Activity
Category | Capabilities |
Browser | Edge, Chrome, Firefox history and downloads |
LNK Files | Windows shortcut analysis for recently accessed files |
ShellBags | Folder navigation history from both UsrClass.dat and NTUSER.DAT, incl. UNC shares and browsed archive interiors (libfwsi) |
RecentDocs | Registry-based recent document tracking |
Windows Search | SIDR-backed |
Network Forensics
Category | Capabilities |
PCAP Analysis | Parse PCAP/PCAPNG files - conversations, DNS queries, HTTP requests, suspicious connections |
API Monitor Capture Analysis
Category | Capabilities |
APMX Parsing | Parse API Monitor captures (.apmx64/.apmx86) - process metadata, API call extraction, parameter values |
Pattern Detection | Detect injection, hollowing, credential dumping, and other attack patterns from captured API call sequences with MITRE ATT&CK mapping |
Handle Correlation | Track handle values across calls to reconstruct attack chains (OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread) |
Injection Analysis | Extract enriched injection chain details: target PID/process, shellcode size, allocation addresses, technique classification |
API Knowledge Base | 26,944 Windows API definitions with parameter signatures, DLL mappings, and category browsing |
Malware Detection
Category | Capabilities |
YARA Scanning | 718 rules from signature-base - APT, ransomware, webshells, hacktools |
IoC Packs | Behavioral IoC packs for hunting across exported logs, filenames, and PCAP payloads; includes optional GPL-2.0 |
VirusTotal | Hash/IP/domain reputation lookups with caching and rate limiting (free tier supported) |
DiE Integration | Detect packers (UPX, Themida, VMProtect), compilers, .NET, installers via Detect It Easy |
Orchestrators
Tool | What It Does |
| Correlates Prefetch + Amcache + SRUM to answer "Was this binary executed?" |
| Correlates Browser + ShellBags + LNK + RecentDocs for user activity timeline |
| Searches for IOC (hash/filename/IP/domain) across ALL artifact sources + optional YARA scanning |
| Hunts behavioral IoCs from bundled/external metadata packs such as |
| Builds unified forensic timeline from multiple sources |
Utilities
Tool | What It Does |
| Import Eric Zimmerman tool CSV output (MFTECmd, PECmd, AmcacheParser) |
Installation
Prerequisites
# Install uv (fast Python package manager)
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
# Ensure Python 3.10+
python3 --versionInstall from PyPI
uv tool install winforensics-mcpInstall from source
git clone https://github.com/x746b/winforensics-mcp.git
cd winforensics-mcp
# Install with uv (recommended)
uv sync
# Or install with all optional extras
uv venv && source .venv/bin/activate
uv pip install -e ".[all]"Windows Search parsing uses SIDR 0.9.2. The source repository includes stripped Linux releases for ARM64 (.tools/sidr) and x86_64 (.tools/sidr_x86), built from the pinned commit recorded in their adjacent manifests. Either architecture can rebuild that exact revision with:
bash scripts/build_sidr.shThe server discovers SIDR from an explicit tool argument, WINFORENSICS_SIDR_PATH, the architecture-matched bundled binary, or PATH, in that order. It never downloads or builds executables at runtime. Build or supply SIDR 0.9.2 separately on unsupported platforms. Without SIDR, windows_search_parse uses a clearly marked partial pyesedb fallback that cannot recover every compressed long value.
Verify
uv run python -m winforensics_mcp.server
# Should start without errors (Ctrl+C to exit)Add to an MCP client
Register winforensics-mcp as a local stdio server in your MCP client's settings. Configuration format and location depend on the client. For clients that accept mcpServers JSON, a PyPI install (uv tool install winforensics-mcp) looks like this:
{
"mcpServers": {
"winforensics-mcp": {
"command": "winforensics-mcp"
}
}
}For a source checkout (uv sync), use:
{
"mcpServers": {
"winforensics-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/winforensics-mcp", "python", "-m", "winforensics_mcp.server"]
}
}
}Replace the example path with the absolute path to your checkout. If your client uses a different configuration format, enter the same command and arguments through its MCP server settings. Make sure winforensics-mcp or uv, respectively, is on the client's PATH, then use the client's MCP server list to confirm it connects.
Quick Start Examples
Was This Binary Executed?
Investigate if mimikatz.exe was executed on the system at /mnt/evidenceThe investigate_execution orchestrator checks Prefetch, Amcache, and SRUM:
{
"target": "mimikatz.exe",
"execution_confirmed": true,
"confidence": "HIGH",
"evidence": [
{"source": "Prefetch", "finding": "Executed 3 times, last at 2024-03-15T14:23:45Z"},
{"source": "Amcache", "finding": "SHA1: abc123..., First seen: 2024-03-14T09:00:00Z"},
{"source": "SRUM", "finding": "Network: 15.2 MB sent; Foreground: 47 seconds"}
]
}Hunt for IOC Across All Artifacts
Hunt for the hash 204bc44c651e17f65c95314e0b6dfee586b72089 in /mnt/evidenceThe hunt_ioc tool searches Prefetch, Amcache, SRUM, MFT, USN, Browser, EVTX, and optionally YARA:
{
"ioc": "204bc44c651e17f65c95314e0b6dfee586b72089",
"ioc_type": "sha1",
"found": true,
"sources_with_hits": ["Amcache", "MFT"],
"findings": [
{"source": "Amcache", "matches": 1, "details": "bloodhound.exe"},
{"source": "MFT", "matches": 1, "details": "Users\\Admin\\Downloads\\bloodhound.exe"}
]
}Compact EVTX and Offline AD Queries
Use compact, fields, where, and max_chars to keep EVTX results focused:
{
"evtx_path": "/evidence/Security.evtx",
"event_ids": [4724],
"where": {"EventData.SubjectUserName": {"neq": "Administrator"}},
"compact": true,
"fields": ["EventID", "TimeCreated", "EventData.TargetUserName"],
"max_chars": 12000
}Follow next_cursor with the same query; evtx_get_event opens a full record.
Use the helpers below for logon correlation, rare-first NTLM summaries, and JSONL
exports. Descriptor tools decode explicit hex/base64 and report unavailable
values honestly. NTDS tools query account, domain, and trust metadata without
SYSTEM or credential decryption.
See the query reference for examples, limits, and completeness semantics.
Tool Reference
Orchestrators (High-Level Investigation)
Tool | Description |
| Correlate Prefetch/Amcache/SRUM to prove binary execution |
| Correlate Browser/ShellBags/LNK/RecentDocs for user activity |
| Hunt IOC (hash/filename/IP/domain) across all artifacts; |
| Build unified timeline from multiple artifact sources |
Execution Artifacts
Tool | Description |
| Static PE analysis - hashes, imports, exports, Authenticode program name, packer detection |
| Parse Prefetch for execution evidence |
| Parse Amcache.hve for SHA1 hashes and timestamps |
| Parse SRUDB.dat with exact/regex app filters, UTC ranges, derived network units, and optional aggregation |
Malware Detection (YARA)
Tool | Description |
| Scan file with 718 YARA rules (Mimikatz, CobaltStrike, webshells, APT, ransomware) |
| Batch scan directory for malware |
| List available/bundled YARA rules |
Behavioral IoC Packs
Tool | Description |
| List bundled and external IoC packs with license metadata |
| Hunt behavioral IoCs across text exports, filenames, and PCAP payloads |
Threat Intelligence (VirusTotal)
Tool | Description |
| Look up file hash (MD5/SHA1/SHA256) on VirusTotal |
| Bounded sandbox domains, URLs, commands, registry/file writes; optional full-result persistence |
| Get IP address reputation and geolocation |
| Get domain reputation and categorization |
| Calculate file hashes and look up on VirusTotal |
Network Forensics (PCAP)
Tool | Description |
| Get PCAP statistics - packet counts, protocols, top talkers |
| Extract TCP/UDP conversations with byte counts |
| Extract DNS queries and responses |
| Extract HTTP requests with URLs, methods, user-agents |
| Search packet payloads for strings or regex patterns |
| Detect C2 indicators, beaconing, DNS tunneling |
API Monitor Capture Analysis (APMX)
Tool | Description |
| Parse .apmx64/.apmx86 capture - process info, modules, call counts |
| Extract API calls with filtering, pagination, and time range support |
| Detailed records with parameter values, return values, timestamps |
| Detect attack patterns (injection, hollowing, credential dumping) with MITRE ATT&CK IDs |
| Track handle producer/consumer chains across API calls |
| Enriched injection chain extraction (target PID, shellcode size, technique) |
| Context window of calls around a specific record |
| Search all records for a specific parameter value |
| Full PE import analysis with pattern detection and MITRE ATT&CK mapping |
| Detect attack patterns from PE import tables |
| Look up Windows API signature (26,944 APIs with params, DLL, category) |
| Browse APIs by category (e.g., "Process Injection", "File Management") |
Packer Detection (DiE)
Tool | Description |
| Analyze file for packers, compilers, protectors, .NET |
| Batch scan directory for packed executables |
| Get info about packer (difficulty, unpack tools) |
File System
Tool | Description |
| Parse $MFT with ADS metadata and timestomping detection |
| Parse $J for file operations and deleted files |
User Activity
Tool | Description |
| Parse Edge/Chrome/Firefox history and downloads |
| Parse Windows shortcuts for target paths |
| Parse ShellBags (UsrClass.dat + NTUSER.DAT) for folder navigation, network shares and archive browsing |
| Parse an explicit |
Offline Active Directory
Tool | Description |
| Read allowlisted metadata for an exact offline SAM account selector |
| Return SID metadata with explicit ambiguity/completeness status |
| Read domain metadata and evidence-backed forest-root attribution |
| Read paginated trust metadata without authentication secrets |
Event Logs
Tool | Description |
| List EVTX files in a directory |
| Get event counts, time range, Event ID distribution |
| Search with filters, compact field projection, response budgets, and stable continuation |
| Retrieve a full normalized event using its source-bound reference |
| Join subject/target LUID occurrences within an explicit time window |
| Persist filtered JSONL with a hash, completion diagnostics, and bounded preview |
| Group NTLM 4021/4022/4023 events and surface rare process/user combinations |
| Decode bounded self-relative descriptor bytes from explicit hex/base64 |
| Describe an EVTX attribute descriptor or report its source placeholder |
| Pre-built security event searches (logon, process creation, etc.) |
| Compact TSV summary for rapid triage - one line per event, attack-relevant columns only |
| Get Event ID description |
Registry
Tool | Description |
| Get specific key and values |
| Search values by pattern |
| Paginated exact/substring/regex registry query with subtree scope, field projection, and diagnostics |
| Get Run keys and services |
| Get user accounts from SAM |
| Correlate USBSTOR identity, physical serial, WPD device names, and secondary volume labels |
| Get OS version, hostname, timezone |
| Get network configuration |
Utilities
Tool | Description |
| Import Eric Zimmerman CSV output (MFTECmd, PECmd, AmcacheParser, SrumECmd) |
| List important Event IDs by channel |
| List forensic registry keys by category |
Remote Collection
Tool | Description |
| Collect artifacts via WinRM (password or pass-the-hash) |
| Get remote system info |
Configuration
VirusTotal API Key
# Option 1: Environment variable
export VIRUSTOTAL_API_KEY="your-api-key-here"
# Option 2: Config file
mkdir -p ~/.config/winforensics-mcp
echo "your-api-key-here" > ~/.config/winforensics-mcp/vt_api_keyGet your free API key at virustotal.com. Free tier is rate-limited to 4 requests/minute; the client handles rate limiting and caches results for 24 hours.
Troubleshooting
DiE (Detect It Easy) not found
# Debian/Ubuntu
sudo apt install detect-it-easy
# Or download from https://github.com/horsicq/DIE-engine/releasesSIDR not found
Source checkouts include stripped SIDR releases for Linux ARM64 and x86_64. To rebuild the pinned revision for the current Rust target, run:
bash scripts/build_sidr.shFor another installation, set WINFORENSICS_SIDR_PATH to a SIDR 0.9.2 executable. The parser reports the executable path, version, SHA-256, database state, extraction completeness, and evidence hashes in every response. See .tools/SIDR-LICENSE for the bundled sidecar's Apache-2.0 license.
Remove MCP Server
Remove the winforensics-mcp entry from your MCP client's server settings.
License
Credits: omerbenamram/evtx (Rust EVTX parser), strozfriedberg/sidr (Windows Search), Rohitab Batra (API Monitor), Neo23x0/signature-base (YARA rules), horsicq/DIE-engine (Detect It Easy)
Core winforensics-mcp code is MIT licensed. See LICENSE.
Optional bundled IoC packs may use different licenses:
winforensics_mcp/ioc_packs/impacket-iocscontains material derived from ThatTotallyRealMyth/Impacket-IoCs and is licensed under GPL-2.0. Seewinforensics_mcp/ioc_packs/impacket-iocs/LICENSE.
Built for the DFIR community. No Windows required >)
Available Tools
55 toolsapi_analyze_importsA
Detailed PE import analysis with pattern detection and API enrichment. Extracts all imports, detects injection/evasion/persistence patterns with MITRE ATT&CK mapping, and optionally enriches with API definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to PE file to analyze | |
| enrich_from_db | No | Add API definitions from knowledge base (requires built DB) | |
| detect_patterns | No | Run pattern detection against import table |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It mentions extraction, pattern detection, and enrichment but does not reveal whether the operation is read-only, performance impacts, or failure modes. It is adequate but lacks depth.
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 extraneous information. The first sentence introduces the core functionality, and the second adds details on patterns and enrichment. It is front-loaded and 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 no output schema and no annotations, the description leaves gaps: it does not describe return values, prerequisites (e.g., file must be PE), or that enrich_from_db requires a built DB. Overall, it is moderately 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%, so baseline is 3. The description adds value by explaining that detect_patterns includes injection/evasion/persistence patterns with MITRE mapping, and enrich_from_db adds API definitions from a knowledge base. This goes beyond the schema 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 it provides detailed PE import analysis, extracting imports, detecting patterns with MITRE ATT&CK mapping, and optionally enriching with API definitions. This verb+resource specification distinguishes it from siblings like api_detect_patterns.
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 versus alternative tools like api_detect_patterns or other analysis tools. The description does not specify prerequisites, exclusions, or contextual triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_detect_patternsA
Detect injection/evasion/persistence API patterns from PE imports. Returns matched patterns with MITRE ATT&CK technique IDs and risk levels.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to PE file to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the detection focus and output type but lacks details on potential side effects, performance, or whether it is a read-only operation. Without annotations, it partially covers behavioral traits.
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 superfluous words. The main action is front-loaded, 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?
The description covers the core purpose and output for a simple single-parameter tool. It could be improved by mentioning return format or error conditions, but it is largely 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?
The schema already provides a clear description for the only parameter (file_path). The description adds no additional semantic context beyond what is in 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 explicitly states the tool detects injection/evasion/persistence API patterns from PE imports and outputs matched patterns with MITRE ATT&CK IDs and risk levels. This clearly differentiates it from siblings like api_analyze_imports.
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 PE file analysis but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_lookupA
Look up Windows API definition (signature, params, DLL, category) from the API Monitor knowledge base. Supports wildcards (e.g., 'Create*').
| Name | Required | Description | Default |
|---|---|---|---|
| api_name | Yes | API name or pattern (e.g., 'CreateFileW', 'NtCreate*') | |
| include_params | No | Include parameter details in results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes what the tool returns and that it supports wildcards, but does not mention safety, idempotency, rate limits, or other behavioral traits typical for a lookup 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 concise sentences. The first defines action and result, the second adds an important feature (wildcard support). No redundant 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?
For a lookup tool with two well-described parameters and no output schema, the description fully explains what the tool returns and its functionality. No gaps given the 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 value by explaining that the api_name parameter supports wildcards and specifying the returned information categories, which is not in 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 the tool looks up Windows API definitions from a knowledge base, listing the returned fields (signature, params, DLL, category). It distinguishes from siblings like api_search_category and api_analyze_imports.
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 mentions wildcard support but does not provide explicit guidance on when to use this tool versus siblings or when not to use it. Usage is implied but not clearly differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_search_categoryA
Browse/search Windows APIs by category. Categories are hierarchical (e.g., 'Data Access and Storage/Local File Systems/File Management').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| category | Yes | Category path or substring to search |
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 being read-only, potential side effects, or safety. For a search tool, transparency is limited; the agent cannot infer whether the operation is safe or has rate limits.
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 that immediately convey purpose and provide a concrete example. No extraneous words or superfluous 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?
For a simple search tool with two parameters and no output schema, the description adequately covers core functionality. It explains the hierarchical category concept but could briefly mention that the 'limit' parameter controls maximum results (though the schema already includes a default).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage. The description adds value by explaining the hierarchical nature of categories with an example, which supplements the schema's 'Category path or substring' description.
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 ('Browse/search') and the resource ('Windows APIs by category') with an illustrative example of hierarchical paths. It effectively distinguishes this tool from sibling tools like 'api_lookup' which are not category-focused.
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 category-based browsing or searching but does not provide explicit guidance on when to use it versus alternatives like 'api_lookup' or other search tools. No when-not or exclusion criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apmx_calls_aroundA
Get a context window of API calls around a specific record index. Returns detailed call records in the range [call_index-before, call_index+after]. Useful for understanding what happened immediately before and after a suspicious call.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Number of records after the target to include | |
| before | No | Number of records before the target to include | |
| file_path | Yes | Path to .apmx64 or .apmx86 capture file | |
| call_index | Yes | The center record index to look around | |
| process_index | No | Which process to read (0 = first/only process) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It states it returns detailed call records for a range, implying it is a read operation. However, it does not mention performance implications, whether it modifies state, or what 'detailed' means. Basic transparency but missing depth.
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: first states purpose, second gives use case. Every word earns its place. No redundancy 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?
The tool has no output schema, so the description should fully explain return values. It only says 'returns detailed call records,' which is vague. Additionally, the process_index parameter is not mentioned, leaving the agent without guidance on multi-process scenarios. Incomplete for a tool with 5 parameters.
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 100%, so baseline is 3. The description does not add new parameter semantics; it simply restates the range concept already captured in the schema. 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 tool gets a context window of API calls around a specific index, which is a specific verb+resource. It implicitly distinguishes from siblings like apmx_get_calls (which likely returns all calls) and apmx_get_call_details (single call details) by focusing on a range.
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 a clear use case: 'useful for understanding what happened immediately before and after a suspicious call.' While it does not explicitly exclude other scenarios or name alternatives, the context is clear enough for an AI agent to decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apmx_correlate_handlesA
Track handle values across API calls to reconstruct operation chains. Identifies handle-producing APIs (OpenProcess, CreateFile, etc.) and traces where those handles are consumed (VirtualAllocEx, WriteProcessMemory, etc.). Reveals attack chains like: OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of handle chains to return | |
| file_path | Yes | Path to .apmx64 or .apmx86 capture file | |
| target_apis | No | Limit to specific APIs (default: common injection/evasion APIs) | |
| process_index | No | Which process to analyze (0 = first/only process) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of disclosing behavior. It explains that the tool identifies handle producers and consumers and reveals attack chains. It does not mention any side effects, authentication needs, or limitations, but the described behavior is consistent with a read-only analysis tool. A score of 4 reflects adequate transparency without annotations.
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, consisting of two sentences that are front-loaded with the core purpose and supplemented with concrete examples. Every word serves a purpose, with 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?
While the description explains the tool's functionality well, it omits important contextual details: the output format is not described (no output schema), and prerequisites like prior parsing with apmx_parse are not mentioned. For a tool with moderate complexity, this gap lowers 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?
All parameters have descriptions in the input schema, achieving 100% coverage. The description adds value by explaining the purpose of target_apis and limit, and giving context about default behavior. The schema handles the basic definitions, but the description enriches understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: tracking handle values across API calls to reconstruct operation chains. It provides specific examples of handle-producing and consuming APIs, and distinguishes itself from sibling tools by focusing on handle correlation rather than generic call listing or pattern detection.
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 analyzing API sequences related to handle usage, with examples of attack chains. However, it does not explicitly state when to avoid this tool or provide alternatives among siblings. The context is clear but lacks explicit usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apmx_detect_patternsA
Detect injection/evasion/persistence patterns in APMX captured API calls. Analyzes runtime behavior (actually-called APIs) against known attack patterns with MITRE ATT&CK technique IDs. Returns risk level and suspicious call timeline.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to .apmx64 or .apmx86 capture file | |
| process_index | No | Which process to analyze (0 = first/only process) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses analysis behavior, use of MITRE ATT&CK, and outputs (risk level, timeline). Does not mention side effects (likely read-only) or performance, but is sufficient for a stateless analysis tool. No contradictions.
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 front-loaded main action, followed by context on MITRE and output. Every sentence adds value; no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately describes output (risk level, suspicious call timeline). Complexity is low with two parameters, one required. Context is sufficient for an agent to invoke correctly.
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% (both parameters described). Description adds no additional meaning beyond schema (file_path and process_index descriptions are clear). Baseline 3 assigned as schema carries the load.
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 tool detects injection/evasion/persistence patterns in APMX captured API calls, uses MITRE ATT&CK IDs, and returns risk level and timeline. This is a specific verb+resource that distinguishes it from siblings like api_detect_patterns (API-focused) and apmx_get_calls (raw calls).
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 analyzing APMX captures for known attack patterns but does not explicitly state when to use this tool vs alternatives (e.g., apmx_injection_info for injection-only analysis, api_detect_patterns for API patterns). Lacks when-not-to-use or prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apmx_get_call_detailsA
Extract detailed API call records with parameter values, return values, and timestamps from an APMX capture. Shows pre-call and post-call parameter values, identifies return values by comparing pre/post state, and extracts embedded strings. Use call_indices for specific records or api_filter to search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of detailed records to return | |
| offset | No | Skip first N matching records (for pagination) | |
| file_path | Yes | Path to .apmx64 or .apmx86 capture file | |
| api_filter | No | Filter by API name substring (case-insensitive) | |
| call_indices | No | Specific record indices to retrieve (overrides filter/pagination) | |
| process_index | No | Which process to read (0 = first/only process) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors: shows pre/post parameter values, identifies return values, and extracts embedded strings. However, it does not explicitly state that the tool is read-only (e.g., analyzing a capture file) or discuss performance implications.
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 extraneous information. The first sentence defines the purpose, the second provides parameter usage guidance. It is front-loaded and 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?
Given the complexity (6 parameters, no output schema, no annotations), the description is reasonably complete. It covers the tool's output (parameter values, return values, timestamps) and parameter usage. However, it could mention error handling or limitations (e.g., file path validity) to be fully 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 description coverage is 100%, so baseline is 3. The description adds value by explaining how to use call_indices and api_filter, but it does not provide additional semantic detail beyond the schema's own 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 tool extracts detailed API call records with parameter values, return values, and timestamps. It uses a specific verb (Extract) and resource (detailed API call records), distinguishing it from sibling tools like apmx_get_calls (which lists calls) and apmx_search_params (which searches parameters).
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 usage guidance: 'Use call_indices for specific records or api_filter to search.' This helps the agent decide which parameters to use. However, it does not explicitly differentiate when to use this tool over siblings like apmx_get_calls for listing vs. details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apmx_get_callsA
Extract API call records from an APMX capture with filtering and pagination. Each record shows the top-level API and any nested calls made within it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of call records to return | |
| offset | No | Skip first N matching records (for pagination) | |
| file_path | Yes | Path to .apmx64 or .apmx86 capture file | |
| api_filter | No | Filter by API name substring (case-insensitive) | |
| process_index | No | Which process to read (0 = first/only process) | |
| time_range_end | No | ISO 8601 datetime — only include calls at or before this time | |
| time_range_start | No | ISO 8601 datetime — only include calls at or after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies read-only operation, but lacks details on performance, error handling, or side effects. Adequate but could be more 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?
Two sentences cover key purpose and behavior. No unnecessary words, front-loaded with core functionality.
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; description partially explains return records ('top-level API and nested calls'). Lacks full detail on output structure, error states, or edge cases. Adequate for a basic extraction 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?
All 7 parameters described in schema (100% coverage). Description mentions filtering/pagination but adds minimal extra meaning beyond schema 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?
Clear verb 'Extract' with specific resource 'API call records from an APMX capture', mentions filtering, pagination, and record structure. Distinct from sibling tools like apmx_calls_around.
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 when-to-use or alternatives. Implies usage for general extraction with filters, but does not differentiate from similar siblings like apmx_calls_around.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apmx_injection_infoB
Extract enriched injection chain details from an APMX capture. Returns target PID, target process name, shellcode size (requested vs aligned), start address, and injection technique label. Wraps handle correlation with parameter decoding for a forensic-friendly summary.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to .apmx64 or .apmx86 capture file | |
| process_index | No | Which process to analyze (0 = first/only process) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'wraps handle correlation with parameter decoding', which gives insight into internal processing. However, it does not explicitly state read-only behavior, error handling, or performance impacts. For a read-only analysis tool, this is adequate but not exceptional.
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 that are front-loaded with the primary action and output, followed by a brief elaboration on the handling. No redundant or unnecessary information. Every sentence earns its place.
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 that the schema fully documents parameters and no output schema exists, the description adequately covers what the tool returns. It lists specific fields (target PID, process name, shellcode sizes, etc.) and explains the forensic-friendly nature. Missing details about error conditions or limitations, but overall complete for its complexity.
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 100%, so the baseline is 3. The description does not add meaning beyond the schema-provided parameter descriptions (file_path and process_index). Both parameters are already well-documented in the schema, so the description's added value is minimal.
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 extracts injection chain details from APMX captures and lists specific outputs (target PID, process name, shellcode sizes, etc.). It is specific about the resource and verb, but does not explicitly differentiate from sibling tools like apmx_calls_around or apmx_get_calls.
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. The description implies it's for injection chain details but does not mention preconditions, exclusions, or comparisons with other apmx tools. Lack of context signals such as 'use if you need injection-specific data' leaves the agent without clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apmx_parseA
Parse Rohitab API Monitor capture file (.apmx64/.apmx86). Returns process info (name, PID, path, command line), loaded modules, and API call count. Use this first to understand what's in a capture.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to .apmx64 or .apmx86 capture file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description transparently describes a read-only parse operation without side effects. However, it doesn't explicitly state that it doesn't modify files or require special permissions, leaving minor ambiguity.
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: first explains action and output, second provides usage guidance. No wasted words, front-loaded with key 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?
Tool has no output schema, but description compensates by listing return values. For a simple parse tool with one parameter, this is mostly complete, though additional details about file size limits or error handling would improve it.
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 100% for the single parameter, so the description adds no new semantic detail beyond what the schema provides. 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?
Description clearly states the tool parses Rohitab API Monitor capture files and lists the returned data (process info, modules, API call count). It distinguishes itself from sibling tools by implying it's the first step.
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?
Explicitly says 'Use this first to understand what's in a capture,' providing clear guidance on when to use 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.
apmx_search_paramsA
Search API calls by parameter value in an APMX capture. Finds all calls where a specific integer (e.g., PID, handle, size) or string appears as a parameter value. Returns matching calls with the matched parameters highlighted.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching calls to return | |
| value | Yes | Integer or string value to search for in parameters | |
| file_path | Yes | Path to .apmx64 or .apmx86 capture file | |
| process_index | No | Which process to search (0 = first/only process) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fails to disclose performance characteristics, limitations, or error handling 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 concise sentences without waste; directly states purpose and output format.
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?
Adequate for a search tool; covers input and output basics but lacks details on return structure or edge cases.
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; description adds minor context about searching integer or string values and highlighting matches.
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?
Clear verb 'Search' with resource 'API calls by parameter value' and distinct from siblings like apmx_get_calls.
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?
Implied usage from purpose, but no explicit when-to-use or alternatives; could benefit from context like 'use instead of apmx_get_calls when filtering by parameter value'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_historyA
Parse browser history and downloads from Edge, Chrome, or Firefox. Answers: What URLs did the user visit? What files were downloaded? Where did downloads originate from?
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results per category | |
| browser | No | Browser type (auto-detected if not specified) | auto |
| url_filter | No | Filter by URL or title (case-insensitive substring) | |
| history_path | Yes | Path to browser History SQLite file or profile directory | |
| dangerous_only | No | Only return downloads flagged as dangerous (Chrome/Edge only) | |
| time_range_end | No | ISO format datetime - filter visits before this time | |
| time_range_start | No | ISO format datetime - filter visits after this time | |
| include_downloads | No | Include download history |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It only states what the tool does (parse) but does not mention that it reads local SQLite files, that it is read-only, or any potential side effects. This is insufficient for an agent to understand the tool's behavior.
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. The first sentence introduces the action and browsers, the second lists the questions answered, making it efficient 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?
The tool has 8 parameters with clear schema descriptions, but no output schema is provided. The description does not explain what the return values look like or how results are structured, leaving a gap for the agent despite good schema coverage.
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 no additional meaning beyond the schema; it only reiterates the high-level purpose. The 'answers' part hints at output but does not directly explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb 'Parse' and identifies the resource 'browser history and downloads' from three named browsers. It also lists the specific questions it answers, making the purpose unambiguous and distinguishable from sibling tools.
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 explicit guidance on when to use this tool versus alternatives or when not to use it. It implies the user needs a history file path but does not clarify prerequisites or context, leaving the agent without clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_timelineA
Build comprehensive forensic timeline from multiple artifact sources (MFT, USN Journal, Prefetch, Amcache, EVTX). Returns sorted, deduplicated events. Answers: What happened and when? Provides unified chronological view of system activity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return | |
| sources | No | List of sources to include in timeline | |
| mft_path | No | Override auto-detected $MFT path | |
| usn_path | No | Override auto-detected USN Journal path | |
| evtx_path | No | Override auto-detected EVTX directory path | |
| amcache_path | No | Override auto-detected Amcache.hve path | |
| artifacts_dir | Yes | Base directory containing forensic artifacts. Tool will auto-detect common paths for MFT, USN, Prefetch, etc. | |
| prefetch_path | No | Override auto-detected Prefetch directory path | |
| keyword_filter | No | Filter events containing this keyword (case-insensitive) | |
| time_range_end | No | ISO format datetime - include events before this time | |
| time_range_start | No | ISO format datetime - include events after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behaviors. It mentions auto-detection of paths, sorting, and deduplication, but does not disclose potential limitations such as performance considerations, memory usage, or what happens when artifacts are missing. The description is adequate but lacks richness.
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 three sentences long, each providing essential information: what the tool does, the output characteristics, and the core question it answers. No redundant or unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, no output schema), the description covers the main purpose and sources adequately. It does not explain the return format or processing limits, but for basic use it is sufficient. Slightly incomplete for advanced scenarios.
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 100%, so the baseline is 3. The description does not add significant meaning beyond what is already in the schema; it repeats the concept of auto-detection and override paths but provides no additional semantic context for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'build' and the resource 'forensic timeline', lists specific artifact sources (MFT, USN, etc.), and distinguishes from sibling tools that parse individual artifacts. It also describes the output characteristics (sorted, deduplicated) and the overarching question it answers ('What happened and when?').
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 this tool is for a unified chronological view, but it does not explicitly state when to use it versus alternatives (e.g., individual parsers like disk_parse_mft). There are no usage exclusions or explicit comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disk_parse_amcacheA
Parse Amcache.hve to extract program execution evidence with SHA1 hashes, file paths, and timestamps. Proves a file existed and was prepared for execution.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries to return | |
| name_filter | No | Filter by file name (case-insensitive substring) | |
| path_filter | No | Filter by file path (case-insensitive substring) | |
| sha1_filter | No | Filter by SHA1 hash (case-insensitive) | |
| amcache_path | Yes | Path to Amcache.hve file | |
| time_range_end | No | ISO format datetime - filter entries before this time | |
| time_range_start | No | ISO format datetime - filter entries after this time |
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 states the tool parses a file and extracts evidence, but does not mention whether it is read-only, potential performance impact, required permissions, or error conditions. This is minimal 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 extremely concise: one sentence followed by a phrase. It is front-loaded with the action and contains no redundant 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?
Given no output schema, the description should explain return structure. It mentions extracted data types but not format or ordering. Parameter descriptions in schema cover filters, so completeness is moderate.
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 100%, with clear descriptions for all 7 parameters. The description adds no additional parameter information beyond the schema, so 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 tool parses Amcache.hve to extract program execution evidence including SHA1 hashes, file paths, and timestamps. It explicitly says 'Proves a file existed and was prepared for execution,' which differentiates it from siblings like disk_parse_mft or disk_parse_prefetch.
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 analyzing Amcache.hve but does not provide explicit guidance on when to use this tool versus siblings like disk_parse_mft, disk_parse_prefetch, or disk_parse_srum. No when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disk_parse_mftA
Parse $MFT (Master File Table) for file metadata, NTFS alternate data streams (ADS), and timestomping detection. Compares $STANDARD_INFORMATION and $FILE_NAME timestamps to identify manipulation. Answers: When was this file actually created? Has it been timestomped? Does it have named streams?
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries to return | |
| mft_path | Yes | Path to $MFT file | |
| files_only | No | Only return files (exclude directories) | |
| output_mode | No | Output mode: full (all data), summary (basic info), timestomping_only (only flagged files) | summary |
| entry_number | No | Get specific MFT entry by number | |
| allocated_only | No | Only return allocated (not deleted) entries | |
| time_range_end | No | ISO format datetime - filter entries modified before this time | |
| file_path_filter | No | Filter by file path, ADS name/path, or resident ADS content (case-insensitive substring) | |
| time_range_start | No | ISO format datetime - filter entries modified after this time | |
| detect_timestomping | No | Flag files where $SI timestamps are earlier than $FN timestamps |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It correctly describes the tool as parsing and analyzing timestamps, implying it is read-only. However, it does not explicitly state that it does not modify data, require special permissions, or have rate limits, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and front-loaded with the core action. It efficiently conveys purpose, scope, and key features without extraneous detail, making it easy 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?
Despite no output schema, the description hints at return values (metadata, timestamps, ADS). It covers the tool's main capabilities and questions it answers. For a complex tool with 10 parameters, it provides sufficient context, though it could briefly mention output structure.
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?
Input schema covers all parameters (100% coverage), so the description's role is minimal. It adds context by tying parameters to the tool's purpose (e.g., timestomping detection), but does not enrich individual parameter descriptions beyond what the 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 the tool parses $MFT for file metadata, ADS, and timestomping detection, distinguishing it from sibling disk parsing tools (e.g., disk_parse_prefetch). It answers specific forensic questions, leaving no ambiguity about its function.
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 implicitly guides usage by highlighting timestomping detection and named stream analysis, which differentiates it from other disk parsers. It provides explicit answers to common forensic queries, helping an agent decide when to invoke this tool, but lacks explicit 'when not to use' or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disk_parse_prefetchA
Parse Windows Prefetch files to determine program execution history, run counts, and last execution times. Can parse a single .pf file or an entire Prefetch directory. Supports pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .pf file or Prefetch directory | |
| limit | No | Maximum number of prefetch entries to return (default 20) | |
| offset | No | Skip first N entries for pagination | |
| executable_filter | No | Filter by executable name (case-insensitive substring). Only applies to directory parsing. | |
| include_loaded_files | No | Include list of files/DLLs loaded by the executable (WARNING: increases output size significantly) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions pagination support and warns about large output with include_loaded_files, but lacks details on authorization requirements, error handling for invalid files, or whether the operation is read-only. Some behavioral context is present but incomplete.
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 three concise, front-loaded sentences. Every sentence adds value: the first states the core purpose, the second clarifies scope (file vs. directory), and the third mentions pagination. No wasted 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?
Given no output schema, the description could better explain return values (e.g., fields in each parsed entry). It mentions high-level output (history, run counts, times) but lacks specifics. Pagination support is noted, but behavior for empty results or errors is omitted.
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 100%, so the baseline is 3. The description adds minimal meaning beyond the schema: it explains that path can be a file or directory and that executable_filter applies only to directory parsing. However, this is not substantial additional insight.
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 parses Windows Prefetch files to determine program execution history, run counts, and last execution times. It specifies the resource (Prefetch files) and the action (parse), distinguishing it from sibling tools that handle other disk artifacts like MFT, SRUM, etc.
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 mentions parsing a single .pf file or entire Prefetch directory, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., disk_parse_amcache for application compatibility). No when-not-to-use or comparative guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disk_parse_srumA
Parse SRUDB.dat for raw application resource counters and network bytes sent/received. Supports application and UTC time filters, derived MB/MiB, and optional network aggregation. Resource counters are not interpreted as elapsed runtime.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entries; all uses limit // 2 per table. Does not limit aggregate inputs. | |
| table | No | Which SRUM table to parse | app_resource_usage |
| srum_path | Yes | Path to SRUDB.dat file | |
| app_filter | No | Application filter; interpreted using app_match_mode | |
| aggregate_by | No | Network tables only (network_data_usage or all). Adds aggregates over all matching rows, independent of the entries limit. Existing entries remain in the response. | none |
| app_match_mode | No | Case-insensitive matching. Exact basename compares only the executable filename; exact path normalizes case and slashes. Regex searches the raw application name and executable. | substring |
| time_range_end | No | Inclusive ISO end for both tables; naive times use UTC | |
| time_range_start | No | Inclusive ISO start for both tables; naive times use UTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds useful caveats such as 'Resource counters are not interpreted as elapsed runtime' and mentions derived MB/MiB and optional network aggregation, but it does not state read-only behavior, output format, or potential side effects/requirements.
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 three concise sentences, front-loaded with the core purpose. Each sentence adds non-redundant information: what is parsed, supported capabilities, and an important interpretive caveat.
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 provides a high-level summary of the output categories and caveats, which is helpful given there is no output schema. It is adequate for an 8-parameter tool with fully documented schema parameters, though it stops short of describing response structure or row-level details.
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 100%, so the baseline is 3. The description mentions application/time filters, derived units, and network aggregation, but these are already documented in the input schema and it adds little semantic value 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 uses a specific verb ('Parse') and resource ('SRUDB.dat'), and clearly states what data it extracts: raw application resource counters and network bytes sent/received. This distinguishes it from sibling disk_parse_* tools by naming the exact artifact it targets.
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 through its focus on SRUDB.dat, but it does not explicitly state when to use this tool over siblings or provide exclusions. There are no alternative-tool references or when-not-to-use guidance, leaving usage to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disk_parse_usn_journalA
Parse $UsnJrnl:$J (USN Journal) for file system change history. Records file creation, deletion, modification, and rename operations. Answers: What files were created/deleted/renamed? When did file changes occur?
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return | |
| usn_path | Yes | Path to $J file (typically $Extend/$J) | |
| files_only | No | Only return file events (exclude directories) | |
| output_mode | No | Output mode: records (individual changes), summary (statistics), deleted_files (only deletions) | records |
| reason_filter | No | Filter by reason types (e.g., FILE_CREATE, FILE_DELETE, RENAME_NEW_NAME) | |
| time_range_end | No | ISO format datetime - filter events before this time | |
| filename_filter | No | Filter by filename (case-insensitive substring) | |
| extension_filter | No | Filter by file extension (for deleted_files mode) | |
| interesting_only | No | Only return forensically interesting changes (create, delete, rename, modify) | |
| time_range_start | No | ISO format datetime - filter events after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must stand alone. It implies a read-only operation (parsing), but does not explicitly state non-destructive behavior, required permissions, or any side effects. It adds moderate context about the kind of information returned.
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?
Description is very concise (two sentences, ~40 words), front-loading the purpose and key questions answered. No extraneous 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?
With 10 parameters and no annotations or output schema, the description covers the primary purpose but does not explain output modes, filtering nuances, or how parameters interact. Adequate for a simple parse tool but could be more comprehensive.
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?
Input schema has 100% description coverage, with detailed descriptions for each parameter. The tool description does not add additional meaning beyond the schema, so 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?
Description clearly identifies the tool as parsing the USN Journal for file system change history, with specific operations (create, delete, modify, rename). It distinguishes itself from sibling disk_parse_* tools by the target artifact ($J file).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like disk_parse_mft. The description states what questions it answers but does not compare or contrast with other tools, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_attack_summaryA
Compact TSV summary of security events for rapid triage. Returns one tab-separated line per event with only attack-relevant columns. Fits entire attack chains in a single call. Types: process_creation (Timestamp|User|ParentProcess|CommandLine), logon (Timestamp|User|SourceIP|LogonType), account_created (Timestamp|NewUser|CreatedBy), scheduled_task, service_installed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max events (default 500) | |
| contains | No | Only events containing ALL these strings (case-insensitive) | |
| evtx_path | Yes | ||
| event_type | No | process_creation | |
| not_contains | No | Exclude events containing ANY of these strings |
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 discloses the output format (TSV), behavior (returns one line per event with attack-relevant columns), and event type details. It does not explicitly state read-only, but the nature implies it.
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 relatively concise and front-loaded with the purpose. It includes necessary details about event types and columns, though it could be slightly more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and no annotations, the description covers the main aspects: purpose, output format, event types, and filtering. It is mostly complete for rapid triage 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 60% (descriptions for 3 of 5 params). The description adds value by explaining the output format and columns for each event type, which helps agents understand parameter usage 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 explicitly states it is a 'Compact TSV summary of security events for rapid triage' and lists specific event types and columns. This clearly distinguishes it from sibling tools like evtx_search or evtx_security_search by focusing on attack-relevant summaries.
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 clear context by stating it is for rapid triage and can fit entire attack chains in a single call. It implies when to use it (quick summary) but does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_correlate_logon_idC
Find subject/target occurrences of one logon ID in an explicit time window (maximum seven days). Rows retain computer, role, original ID and event reference; matching IDs alone do not establish identity across hosts or reboots.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | Continuation bound to the same source and query. Do not combine with offset. | |
| offset | No | ||
| computer | No | ||
| end_time | Yes | ||
| logon_id | Yes | ||
| max_scan | No | Maximum source records examined. A capped result reports an inexact total. | |
| event_ids | No | ||
| evtx_path | Yes | ||
| max_chars | No | MCP result JSON character budget, including metadata; default 12000. | |
| start_time | Yes | Aware ISO time; required window cannot exceed seven days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| offset | Yes | |
| returned | Yes | |
| next_cursor | Yes | |
| next_offset | Yes | |
| scan_complete | Yes | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| serialized_chars | Yes | |
| time_filter_errors | No | |
| result_set_complete | Yes | |
| total_matched_exact | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does add useful context: the seven-day window cap, retained row fields, and an identity caveat. However, it omits read-only status, permissions, pagination behavior, and how max_scan capping affects result completeness.
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 compact sentences front-load the core purpose and append a relevant caveat. There is no filler, though the second sentence mixes result-shape information with an interpretive warning.
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 an 11-parameter forensic correlation tool with no annotations and low schema description coverage, the description is under-specified. An output schema may cover return values, but the description still leaves major usage and parameter-semantics gaps.
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 only 36%, so the description should compensate, but it only implies the logon_id and start/end time parameters. It leaves computer, event_ids, cursor, offset, limit, max_scan, and max_chars unexplained beyond sparse schema 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?
States a specific verb ('Find') and resource ('subject/target occurrences of one logon ID') within an explicit time window. It distinguishes itself from broad sibling searches by centering on logon-ID correlation, though it does not name alternative tools.
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?
There is no when-to-use or when-not-to-use guidance. The note that matching IDs alone do not establish identity is an interpretive caveat, not routing advice or a comparison to sibling tools such as evtx_search or evtx_security_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_describe_security_descriptorB
Describe a security-descriptor value in a source-bound EVTX event. Preserves provenance and reports source placeholders such as Malformed Security Descriptor without inventing missing SIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | EventData.AttributeValue | |
| encoding | Yes | Explicit representation of the descriptor bytes. No encoding guessing or SDDL conversion. | |
| max_aces | No | Global emitted-ACE cap across SACL and DACL. The complete bounded input is still structurally validated; omissions are explicit. | |
| event_ref | Yes | ||
| evtx_path | Yes | ||
| max_chars | No | Description budget; if too small, reduce max_aces or increase max_chars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dacl | No | |
| sacl | No | |
| group | No | |
| owner | No | |
| parse_errors | Yes | |
| parse_status | Yes | |
| parse_complete | Yes | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| serialized_chars | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral burden. It adds useful context: preserving provenance and not inventing missing SIDs, reporting placeholders like 'Malformed Security Descriptor.' However, it does not clarify whether this is a read-only operation, what permissions are required, or what the output looks like beyond what the output schema provides.
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 tightly written sentences with no wasted words. The core purpose is front-loaded, and the second sentence efficiently adds a key behavioral guarantee about provenance and missing SIDs.
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 six parameters, three required, and only 50% schema description coverage, the description is too sparse. It does not compensate for undocumented parameters, lacks usage guidance, and provides minimal behavioral context. The presence of an output schema covers return values, but overall completeness is low.
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 only 50% (encoding, max_aces, and max_chars have descriptions; field, event_ref, and evtx_path do not). The description does not mention any parameters or add meaning beyond the schema, leaving three parameters undocumented in both schema and description.
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 a specific verb and resource: 'Describe a security-descriptor value in a source-bound EVTX event.' It distinguishes itself from generic EVTX tools by scoping to security descriptors and emphasizing provenance. However, it does not explicitly differentiate from the sibling tool 'security_descriptor_decode', so it falls short of a 5.
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 'security_descriptor_decode' or other EVTX tools. The description implies it is for describing security descriptors in EVTX events, but there are no explicit conditions, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_explain_event_idC
Get description of a Windows Event ID.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Security | |
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description merely says 'Get description', which implies a read operation, but it does not disclose any behavioral traits such as required permissions, error behavior for invalid event IDs, or the role of the channel parameter. The description carries a heavy burden without annotations and fails to provide sufficient detail.
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 short (a single phrase), but it is under-specified rather than concise. It does not provide enough information to effectively use the tool, leaving the agent with minimal context.
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 two parameters and no output schema, the description is too minimal. It does not explain the return format, error handling, or the significance of the 'channel' parameter, making it incomplete for an agent to invoke correctly.
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 0%, so the description must compensate for the lack of parameter documentation. However, it does not mention the 'event_id' (integer) or 'channel' (string, default 'Security') parameters at all, offering no guidance on their meaning or usage.
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 description of a Windows Event ID', which is a specific verb-resource pair and provides a clear purpose. It does not differentiate from siblings like evtx_search or evtx_get_stats, but it is distinct enough in function.
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 evtx_search or evtx_attack_summary. There are no when-to-use, when-not-to-use, or prerequisite instructions, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_exportB
Persist all selected EVTX matches in a unique JSONL file with SHA-256 and a bounded preview. Explicit scan/row caps report incomplete; preview clipping does not discard file rows.
| Name | Required | Description | Default |
|---|---|---|---|
| where | No | Field-specific AND predicates. Missing fields fail comparisons, including neq. Use exists for presence; ordering uses numeric operands or aware ISO timestamps on TimeCreated. | |
| fields | No | System fields, dotted EventData/UserData paths, or unambiguous aliases. | |
| format | No | jsonl | |
| compact | No | Compact rows with event references; selects structured output by default. | |
| contains | No | ||
| end_time | No | ||
| max_rows | No | Optional explicit export cap; a capped export reports incomplete. | |
| max_scan | No | Maximum source records examined. A capped result reports an inexact total. | |
| provider | No | ||
| event_ids | No | ||
| evtx_path | Yes | ||
| max_chars | No | Response budget for metadata plus preview. Does not limit the exported file. | |
| output_dir | Yes | Explicit destination directory. A unique 0600 file is published without overwriting existing files. | |
| start_time | No | ||
| not_contains | No | ||
| preview_rows | No | ||
| timestamp_precision | No | both adds timestamp_second in UTC without changing TimeCreated. | full |
| where_case_sensitive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| sha256 | Yes | |
| preview | Yes | |
| exported_rows | Yes | |
| scan_complete | Yes | |
| exported_bytes | Yes | |
| returned_chars | Yes | |
| export_complete | Yes | |
| payload_clipped | Yes | |
| preview_clipped | Yes | |
| export_limit_hit | Yes | |
| preview_returned | Yes | |
| serialized_chars | Yes | |
| time_filter_errors | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real behavioral facts: a unique file, a SHA-256 digest, and the crucial distinction that preview clipping does not discard file rows while scan/row caps mark the export incomplete. It still omits error/failure behavior, permission expectations, and what 'unique 0600, no overwrite' (only in the schema) implies operationally.
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 tight sentences with the primary action front-loaded and no filler. The density is near the edge of cryptic, but each clause (SHA-256, bounded preview, cap vs clip semantics) carries distinct 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?
An output schema exists, so return values needn't be explained, and the export/artifact semantics are covered. For an 18-parameter tool with a nested where object and heavy time-range filtering, the description still leaves filtering and predicate behavior to the schema alone.
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 only 44% across 18 parameters, so the description should compensate more than it does. It clarifies the interplay of scan/row caps and the preview budget, but leaves the filter surface (contains, not_contains, event_ids, provider, start_time/end_time, where) without additional meaning beyond what the schema already says.
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?
States a specific verb (persist/export) and resource (selected EVTX matches) plus the artifact produced (a unique JSONL file with SHA-256 and a bounded preview). The word 'persist' implicitly distinguishes it from evtx_search-style read-only siblings, though no sibling is named explicitly.
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?
There is no statement of when to prefer this over evtx_search, evtx_security_search, or evtx_get_event, nor any prerequisites. The phrase 'all selected matches' hints the tool consumes filters established elsewhere, but the agent gets no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_get_eventA
Retrieve a full normalized event using a source-bound event_ref from evtx_search. Never shortens evidence fields.
| Name | Required | Description | Default |
|---|---|---|---|
| event_ref | Yes | ||
| evtx_path | Yes | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | Yes | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| serialized_chars | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses one meaningful behavioral trait – that evidence fields are never shortened – but says nothing about permissions, side effects, or how max_chars interacts with that guarantee, leaving the safety/behavior profile largely undeclared.
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 tight sentences, front-loaded with the action and the key prerequisite, then the truncation guarantee. No 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?
An output schema exists, so return-value explanation is unnecessary, and the description covers the core identity and the event_ref provenance. The main gap is the unexplained relationship between max_chars and the 'never shortens' guarantee, plus no mention of what evtx_path must point to.
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 0%, so the description must compensate. It adds meaning for event_ref (source-bound, produced by evtx_search) but says nothing about evtx_path or max_chars, and the 'never shortens evidence fields' claim only obliquely gestures at max_chars 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?
States a specific verb (retrieve) and resource (full normalized event) and distinguishes itself from siblings by naming evtx_search as the producer of the required event_ref. An agent can tell this is the detail-fetch counterpart to a search tool without reading any schema.
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?
It explicitly ties usage to a source-bound event_ref originating from evtx_search, giving clear context for when this tool applies. There is no explicit when-not guidance or exclusion, but the prerequisite is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_get_statsA
Get statistics about an EVTX file: event counts, time range, Event ID distribution.
| Name | Required | Description | Default |
|---|---|---|---|
| evtx_path | Yes | Path to EVTX file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states 'Get statistics' implying a read operation, but does not mention non-destructive nature, auth needs, or any other behavioral traits.
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 sentence that conveys the core purpose and output details without extraneous 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 a single parameter and no output schema, the description adequately describes the output types (event counts, time range, Event ID distribution). Some might consider it slightly incomplete regarding the exact format, but it is suitable for a simple statistical 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% (evtx_path has a description). The description adds no additional parameter details 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 it gets statistics (event counts, time range, Event ID distribution) from an EVTX file. This distinguishes it from sibling tools like evtx_search or evtx_explain_event_id.
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 overall statistics are needed, but does not explicitly state when to use this versus other EVTX tools 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.
evtx_list_filesC
List all EVTX (Windows Event Log) files in a directory.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes | Directory path to search | |
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description only says 'list files' without disclosing error handling, file filtering behavior, or performance implications.
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 sentence, concise but too brief to provide necessary details; it's not overlong but lacks substance.
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, no annotations, and only partial param descriptions, the description should explain return format, sorting, or filtering; it does not.
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 50% (only 'directory' has description); the tool description adds no extra meaning beyond what's in the schema, failing to compensate for the missing 'recursive' description.
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 (list) and resource (EVTX files in a directory), and it distinguishes from siblings like evtx_search and evtx_attack_summary by specifying file listing.
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 (e.g., evtx_search), no when-not-to-use conditions, and no prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_ntlm_operational_summaryA
Summarize NTLM Operational events 4021/4022/4023, aggregate repeated shapes, and explicitly order rare process/user combinations first. Preserves counts, timestamps and event references, with bounded distributions and honest unknown statuses.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order | No | rare_first | |
| cursor | No | Continuation bound to the same source and query. Do not combine with offset. | |
| domain | No | ||
| offset | No | ||
| status | No | ||
| process | No | ||
| end_time | No | ||
| max_scan | No | Maximum source records examined. A capped result reports an inexact total. | |
| username | No | ||
| aggregate | No | ||
| client_ip | No | ||
| event_ids | No | ||
| evtx_path | Yes | ||
| max_chars | No | Budget includes rows and bounded overview; default 12000. | |
| start_time | No | Aware ISO time. | |
| unusual_only | No | Keep only process/user/domain/computer tuples whose frequency is at most rarity_threshold. Rarity is not an attack verdict. | |
| overview_limit | No | ||
| rarity_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| offset | Yes | |
| returned | Yes | |
| next_cursor | Yes | |
| next_offset | Yes | |
| scan_complete | Yes | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| serialized_chars | Yes | |
| time_filter_errors | No | |
| result_set_complete | Yes | |
| total_matched_exact | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose meaningful traits: counts/timestamps/event references are preserved, distributions are bounded, unknown statuses are reported honestly, and rarity is explicitly stated not to be an attack verdict. It still omits read-only/permission and performance characteristics, but the output-semantics disclosure is solid.
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 dense, front-loaded sentence that leads with the action and resource and then layers the differentiating behaviors. No filler or repetition, though the phrasing is compressed enough that some clauses need unpacking.
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?
An output schema exists, so return-value explanation is not required, and the mutation/permission profile is trivially read-only. However, for a 19-parameter tool with thin schema documentation, the description leaves filtering and pagination semantics unexplained, which an agent needs in order to call it correctly.
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 only 26% across 19 parameters, so the description must compensate. It does explain the core semantics behind order (rare-first), aggregate, and bounded distributions, but says nothing about the many filter parameters (domain, username, process, client_ip, status, event_ids) or the cursor/offset paging contract.
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?
States a specific verb (summarize) and resource (NTLM Operational events 4021/4022/4023), plus the distinctive behavior of aggregating repeated shapes and ordering rare combinations first. It does not name a sibling tool to differentiate from (e.g. evtx_attack_summary or evtx_get_stats), but the scope is specific enough to identify the tool.
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?
Usage is implied by the tool's specialty (NTLM operational event triage with rarity ordering), and the default order=rare_first is surfaced, but there is no explicit 'use this instead of X when Y' guidance despite many overlapping evtx_* siblings such as evtx_search and evtx_attack_summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_searchB
Search EVTX events by time, Event ID, keywords, or provider. Supports compact structured projection, whole-record budgets, and source-bound continuation cursors. File-record order is preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| where | No | Field-specific AND predicates. Missing fields fail comparisons, including neq. Use exists for presence; ordering uses numeric operands or aware ISO timestamps on TimeCreated. | |
| cursor | No | Continuation bound to the same source and query. Do not combine with offset. | |
| fields | No | System fields, dotted EventData/UserData paths, or unambiguous aliases. | |
| offset | No | ||
| compact | No | Compact rows with event references; selects structured output by default. | |
| contains | No | ||
| end_time | No | ||
| max_scan | No | Maximum source records examined. A capped result reports an inexact total. | |
| provider | No | ||
| event_ids | No | ||
| evtx_path | Yes | ||
| max_chars | No | MCP result JSON character budget, including metadata; default 12000 compact, otherwise 40000. | |
| start_time | No | ISO format datetime | |
| not_contains | No | ||
| output_format | No | Defaults to structured for compact queries, otherwise legacy JSON text. | |
| timestamp_precision | No | both adds timestamp_second in UTC without changing TimeCreated. | full |
| where_case_sensitive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add real behavioral context — result-order preservation, source-bound cursors, and projection/budget semantics — which is more than most. However it says nothing about read-only safety, error behavior, or the cost/cap behavior beyond the passing mention of budgets.
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?
Three tightly packed sentences, front-loaded with purpose before capabilities. Efficient, though the second sentence is a dense feature list that would benefit from slightly more specificity about what 'whole-record budgets' implies.
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 an 18-parameter, nested-object search tool with no output schema and no annotations, the description covers core behaviors but leaves combination rules (cursor vs offset is only in the schema), required-path semantics, and result-shape expectations to other sources — 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 50% on 18 parameters, so the description must compensate. It does group the filter params (time/event-id/keywords/provider) and names the projection/budget/cursor concepts, but ignores limit, offset, where, timestamp_precision, and where_case_sensitive, which remain undocumented in both places.
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?
States a specific verb ('Search') and resource ('EVTX events') plus the four filter dimensions (time, Event ID, keywords, provider). An agent can tell what it does, but the description never distinguishes it from siblings like evtx_security_search or evtx_get_event, which overlap heavily on the same EVTX 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?
No when-to-use guidance, prerequisites, or alternatives are given. With 7+ sibling evtx_* tools, the agent is left to infer from the name alone whether this is the general-purpose search versus evtx_security_search or evtx_get_event.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evtx_security_searchB
Search Security events by named type, with the same compact fields, response budgets, and continuation controls as evtx_search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| where | No | Field-specific AND predicates. Missing fields fail comparisons, including neq. Use exists for presence; ordering uses numeric operands or aware ISO timestamps on TimeCreated. | |
| cursor | No | Continuation bound to the same source and query. Do not combine with offset. | |
| fields | No | System fields, dotted EventData/UserData paths, or unambiguous aliases. | |
| offset | No | ||
| compact | No | Compact rows with event references; selects structured output by default. | |
| max_scan | No | Maximum source records examined. A capped result reports an inexact total. | |
| evtx_path | Yes | ||
| max_chars | No | MCP result JSON character budget, including metadata; default 12000 compact, otherwise 40000. | |
| event_type | Yes | ||
| output_format | No | Defaults to structured for compact queries, otherwise legacy JSON text. | |
| timestamp_precision | No | both adds timestamp_second in UTC without changing TimeCreated. | full |
| where_case_sensitive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that output uses compact fields, a response budget, and cursor-based continuation, which is useful behavioral context, but it says nothing about read-only semantics, result shape, or how capping/inexact totals behave (left to the schema).
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 front-loaded sentence that names the resource and the inherited behavior with no filler. Nothing redundant or padded.
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 13-parameter tool with a nested where object, heavy enums, and no output schema, the description is very thin. It defers almost everything to evtx_search, which the agent may not know, and provides no return-value or paging 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 62%, so many parameters already carry their own descriptions. The phrase 'compact fields, response budgets, and continuation controls' loosely maps to compact/max_chars/cursor, but the description adds no operational detail for the 13 parameters and leaves the nested where object entirely to 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?
States a specific verb ('Search') plus resource ('Security events') and a scoping mechanism ('by named type'), which is enough to tell it apart from evtx_search. It stops short of fully disambiguating what evtx_search returns that this one does not, but the purpose is concrete.
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 division of labor with evtx_search (named event types vs. general search) and inheritance of its controls, but never states when to prefer this tool or when-not. Usage is inference-based rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_analyze_peA
Perform static analysis on Windows PE files (EXE/DLL/SYS). Extracts headers, imports, exports, sections, hashes, Authenticode metadata including SpcSpOpusInfo program name, and suspicious indicators.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the PE file to analyze | |
| detail_level | No | Level of detail: minimal (hashes+type), standard (+ sections/imports), verbose (+ all data) | standard |
| extract_strings | No | Extract ASCII/Unicode strings (can be verbose) | |
| calculate_hashes | No | Calculate MD5, SHA1, SHA256, Imphash | |
| check_signatures | No | Inspect Authenticode metadata and known packer/crypter signatures |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the disclosure burden. It explicitly says 'static analysis', signaling a read-only operation, and lists the extracted data (headers, imports, exports, hashes, Authenticode metadata, suspicious indicators). It does not mention performance caveats or limitations, but the static nature and output scope are well disclosed.
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, front-loaded sentence that states the core action and then lists the extracted artifacts in a compressed sequence. Every element adds information, with no 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?
The definition covers the input type, the analysis action, and the output categories, while the schema fully documents all five parameters and defaults. Without an output schema, the enumerated extraction list gives the agent a good picture of the return content; no critical missing context for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema_description_coverage is 100%, baseline is 3. The description adds no parameter-level semantics beyond the schema; it mentions output categories but not how they map to the detail_level, extract_strings, calculate_hashes, or check_signatures parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Perform static analysis') and a concrete resource ('Windows PE files (EXE/DLL/SYS)'), then enumerates the output categories. This clearly distinguishes it from sibling forensic tools focused on EVTX, registry, or disk artifacts.
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?
It clearly establishes the file type this tool applies to, so an agent can select it for PE files. However, it does not mention alternatives or conditions where another tool (e.g., api_analyze_imports for import-focused analysis) would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forensics_list_important_eventsB
List important Event IDs for a log channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the tool lists event IDs, which implies a read operation. However, it does not specify the format of the output, whether the list is exhaustive or curated, or any side effects. For a simple listing tool, the description is minimally transparent.
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, front-loaded sentence with no filler. Every word contributes to stating the tool's purpose.
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 required enum parameter, no output schema), the description is adequate but minimal. It does not explain what 'important' means, how the IDs are determined, or what the output looks like. For a tool that likely returns a list of integers, more context would help an agent gauge its utility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the 'channel' parameter or its enum values. The input schema fully defines the parameter with an enum, but the description adds no additional meaning, such as examples or context for what 'important' means per channel. Schema description coverage is 0%, so the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('important Event IDs for a log channel'). It distinguishes from siblings like evtx_explain_event_id which explains a single event ID, and evtx_search which searches events, by focusing on listing important predefined IDs for a given channel.
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 specific use cases, prerequisites, or under what conditions this tool is preferred over siblings like evtx_explain_event_id or evtx_get_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forensics_list_registry_keysC
List forensically important registry keys.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
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 says 'List' (implying read-only) but does not clarify whether it accesses a live system or forensic image, permission requirements, or output format (e.g., key paths, timestamps, values).
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 very short (one sentence) but omits essential details about the parameter and output. While front-loaded and efficient, it sacrifices completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain what is returned (e.g., list of key paths or full key details). It does not. The category parameter is also unexplained. For a single-parameter tool, this is inadequate.
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 schema has 0% description coverage for the category parameter, and the tool description does not mention it or explain what each enum value returns. The agent only sees the enum labels, which lack semantic clarity beyond their names.
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 'List forensically important registry keys' indicates a verb and resource but fails to define what qualifies as 'important' or what the output contains (e.g., key names, paths, values). It does not mention the category parameter, leaving scope ambiguous.
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 sibling tools like registry_get_network, registry_get_persistence, or registry_search. The agent is left to infer the use case without any contextual hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hunt_iocA
Hunt for IOC (hash, filename, IP, domain) across all forensic artifacts. Searches Prefetch, Amcache, SRUM, MFT, USN Journal, Browser History, EVTX logs, and optionally YARA rules. Answers: Where does this IOC appear? Was this file/hash/domain seen on the system? Is it known malware?
| Name | Required | Description | Default |
|---|---|---|---|
| ioc | Yes | The indicator to search for: MD5/SHA1/SHA256 hash, filename, IP address, or domain | |
| ioc_type | No | Type of IOC (auto-detected if not specified) | auto |
| mft_path | No | Override auto-detected $MFT path | |
| usn_path | No | Override auto-detected USN Journal path | |
| evtx_path | No | Override auto-detected EVTX directory path | |
| srum_path | No | Override auto-detected SRUDB.dat path | |
| yara_scan | No | If True, scan the file with YARA rules when IOC is a filename and file is found. Provides threat intelligence (is it known malware?). | |
| amcache_path | No | Override auto-detected Amcache.hve path | |
| artifacts_dir | Yes | Base directory containing forensic artifacts. Tool will auto-detect common paths. | |
| prefetch_path | No | Override auto-detected Prefetch directory path | |
| time_range_end | No | ISO format datetime - filter events before this time | |
| time_range_start | No | ISO format datetime - filter events after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions searching multiple artifacts, auto-detection of paths, and optional YARA scanning, but does not state if the tool is read-only, its performance impact, or any side effects. The description gives moderate behavioral insight but leaves gaps.
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 three sentences: purpose, artifacts covered, and example questions. It is front-loaded and efficient, but could be more structured by separating parameter hints. Still, it is concise and easy 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 the tool's complexity (12 parameters, 2 required, no output schema), the description provides a good overview but lacks details on output format, error handling, or behavior when artifacts are missing. It answers conceptual questions but leaves implementation details unspecified.
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 schema already documents all parameters. The description adds context by listing the artifact types searched, which aligns with the override path parameters, but does not add significant meaning beyond the schema. 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 hunts for IOCs (hash, filename, IP, domain) across multiple forensic artifacts, listing specific ones (Prefetch, Amcache, etc.). It distinguishes from sibling tools that parse single artifacts (e.g., disk_parse_mft) by offering a comprehensive search. The purpose is specific and actionable.
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 includes example questions that indicate when to use the tool (e.g., 'Where does this IOC appear?'). It implies it is for cross-artifact hunting, but does not explicitly state when not to use it or mention alternative tools for single-artifact analysis. Guidance is clear but lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hunt_ioc_packA
Hunt behavioral IoCs from a metadata pack across exported logs, text artifacts, filenames, and PCAP payloads. Bundled pack: impacket-iocs.
| Name | Required | Description | Default |
|---|---|---|---|
| pack | No | Bundled pack id/name to load | impacket-iocs |
| limit | No | Maximum findings/hits to return | |
| max_files | No | Maximum files to inspect | |
| pack_path | No | Optional external pack directory or pack.json path | |
| scan_pcap | No | Scan PCAP payloads when scapy is installed | |
| scan_files | No | Scan plaintext exports/logs and filenames | |
| artifacts_dir | Yes | Base directory containing forensic artifacts, exported logs, PCAPs, or parsed tool output | |
| max_file_size | No | Skip files larger than this many bytes |
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 indicates scanning of various data sources but does not mention side effects, authorization needs, or whether the operation is read-only. Critical behavioral context is missing.
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 exceptionally concise: two sentences front-load the core purpose and a key example. Every word adds value with no 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 the tool's complexity (8 parameters) and no output schema, the description covers the main purpose and sources adequately. However, it lacks guidance on workflow, prerequisites, or return format, leaving minor gaps.
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 the bundled pack name as an example, but does not significantly augment meaning beyond the schema. 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 verb 'Hunt', the resource 'behavioral IoCs from a metadata pack', and the scope across multiple artifact types (logs, texts, filenames, PCAPs). It distinguishes from sibling 'hunt_ioc' by specifying the bundled pack mechanism.
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 pack-based hunting but does not explicitly state when to use this tool versus alternatives (e.g., hunt_ioc) or when not to use it. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_parsed_csvA
Import pre-parsed CSV from Eric Zimmerman tools (MFTECmd, PECmd, AmcacheParser, SrumECmd) for querying. Auto-detects CSV type by column headers. Useful when you already have parsed output from EZ tools.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries to return | |
| csv_path | Yes | Path to the CSV file | |
| csv_type | No | Type of CSV (auto-detected if not specified) | auto |
| filter_field | No | Field name to filter on (e.g., 'filename', 'sha1', 'executable') | |
| filter_value | No | Value to filter for (case-insensitive substring match) | |
| time_range_end | No | ISO format datetime - filter entries before this time | |
| time_range_start | No | ISO format datetime - filter entries after this time |
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 mentions auto-detection of CSV type but does not describe whether the tool is read-only, what side effects occur (e.g., file persistence), or the response format. With a score of 3, it provides basic context but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that front-load the core action ('Import pre-parsed CSV...') and purpose. Every sentence adds value without 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?
The tool has no output schema, so the description should hint at return values. It only says 'for querying,' which is vague. Filtering behavior is implied by parameters but not explained. More detail on what the tool returns 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 input schema already describes each parameter. The description adds marginal value by noting auto-detection, but this is already reflected in the 'auto' default for csv_type. Thus, a 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 imports pre-parsed CSV from Eric Zimmerman tools for querying, which differentiates it from sibling tools that parse raw data (e.g., disk_parse_mft). The verb 'import' and specific resource 'pre-parsed CSV from EZ tools' make the purpose unambiguous.
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 says 'Useful when you already have parsed output from EZ tools,' which implies when to use this tool. It does not explicitly mention when not to use it or suggest alternatives, but the context of sibling tools provides some differentiation, earning a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
investigate_executionA
Comprehensive execution analysis. Correlates Prefetch, Amcache, and SRUM to prove or disprove binary execution. Answers: Was this binary executed? When? How long did it run? Provides confidence scoring and unified timeline.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Executable name (e.g., 'mimikatz.exe'), file path, or SHA1 hash to investigate | |
| srum_path | No | Override auto-detected SRUDB.dat path | |
| amcache_path | No | Override auto-detected Amcache.hve path | |
| artifacts_dir | Yes | Base directory containing forensic artifacts (Prefetch, Amcache.hve, SRUDB.dat). Tool will auto-detect common paths. | |
| prefetch_path | No | Override auto-detected Prefetch directory path | |
| time_range_end | No | ISO format datetime - filter events before this time | |
| time_range_start | No | ISO format datetime - filter events after this time |
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 discloses the tool correlates multiple artifacts and provides answers, but does not mention limitations such as handling of missing artifacts, performance implications, or required privileges. The parameter description notes auto-detection of paths, adding some 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 concise, using multiple short sentences that each add value: it states the tool is comprehensive, specifies correlated artifacts, answers key questions, and mentions outputs (confidence scoring, timeline). No filler 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 the complexity (7 params, no output schema, no annotations), the description covers the main purpose, artifacts, and questions. It lacks details on output format or behavior when artifacts are missing, but is reasonably complete for a tool with strong schema descriptions.
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 100%, so baseline is 3. The description adds no additional semantics beyond the schema descriptions; it focuses on overall purpose. Parameters are well-documented in the schema, so no further elaboration needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: comprehensive execution analysis by correlating Prefetch, Amcache, and SRUM. It answers specific questions (whether executed, when, duration) and provides unified timeline and confidence scoring. This distinguishes it from sibling tools that parse individual artifacts.
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 execution investigation but does not explicitly state when to use this tool versus alternatives like disk_parse_prefetch or evtx_search. No when-not or alternatives are given, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
investigate_user_activityA
Comprehensive user activity investigation. Correlates Browser History, ShellBags, LNK files, and RecentDocs to build a complete picture of user activity. Answers: What did the user browse? What files did they access? What folders did they navigate?
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results per source | |
| keyword | No | Optional keyword to search across all sources (URLs, filenames, paths) | |
| lnk_path | No | Override auto-detected Recent LNK folder path | |
| username | No | Optional username to narrow artifact search in multi-user images | |
| ntuser_path | No | Override auto-detected NTUSER.DAT path | |
| browser_path | No | Override auto-detected browser History path | |
| artifacts_dir | Yes | Base directory containing forensic artifacts or user profile | |
| usrclass_path | No | Override auto-detected UsrClass.dat path | |
| time_range_end | No | ISO format datetime - filter events before this time | |
| suspicious_only | No | For ShellBags, only return suspicious folder access (temp, AppData, network shares) | |
| time_range_start | No | ISO format datetime - filter events after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it correlates multiple sources and can override auto-detected paths, but lacks behavioral context such as whether artifacts must be present, performance impacts, or destructive actions. With no annotations, more detail would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and front-loaded with the main purpose, followed by sources and questions. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters and no output schema, the description does not explain the output format, how correlation results are presented, or potential limitations. This leaves agents without full context for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add extra meaning to parameters beyond what the schema already provides, only summarizing the overall purpose.
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 identifies the tool as a comprehensive investigation correlating multiple artifact types (Browser History, ShellBags, LNK files, RecentDocs) to answer specific questions about user activity. It distinguishes itself from sibling tools like browser_get_history or user_parse_shellbags by combining them.
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 that this tool is for comprehensive investigation, while siblings cover individual sources. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ioc_pack_listA
List bundled and optional external behavioral IoC packs, including license metadata and rule counts.
| Name | Required | Description | Default |
|---|---|---|---|
| extra_paths | No | Optional external pack directories or pack.json files to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral transparency. It mentions output (license metadata, rule counts) but does not disclose whether the operation is read-only, idempotent, or has any side effects or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence of 18 words. It is front-loaded with the action and resource, and every phrase adds value. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and output fields (license metadata, rule counts) but does not specify the return format, whether filtering is possible, or if the list includes built-in packs. Given no output schema and multiple siblings, more detail on the output structure 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?
The input schema has one optional parameter 'extra_paths' with its own description. The tool description does not add any additional meaning beyond what the schema already provides. Since schema coverage is 100%, 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 lists bundled and optional external behavioral IoC packs with license metadata and rule counts. It uses specific verb 'list' and resource 'IoC packs', differentiating from sibling tools like 'hunt_ioc_pack' which hunts rather than lists.
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 listing packs but provides no explicit guidance on when to use this tool versus alternatives like hunt_ioc_pack. No when-not-to-use or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ntds_get_domain_infoB
Read domain metadata and evidence-backed forest-root identification from offline NTDS. Local-domain attribution retains relationship/liveness uncertainty; no SID-prefix guessing or credential extraction.
| Name | Required | Description | Default |
|---|---|---|---|
| max_scan | No | Maximum datatable records examined. Caps or schema uncertainty prevent complete-result claims. | |
| domain_dn | No | Optional exact, case-insensitive domain DN scope. | |
| max_chars | No | ||
| ntds_path | Yes | ||
| diagnostic_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| domains | Yes | |
| forest_root | Yes | |
| local_domain | No | |
| scan_complete | No | |
| database_clean | No | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| schema_complete | No | |
| results_complete | Yes | |
| serialized_chars | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does add meaningful non-obvious context: evidence-backed forest-root identification, retained uncertainty in local-domain attribution, and explicit refusal to guess SID prefixes or extract credentials. It still does not state read-only safety or performance characteristics, but the disclosed limitations are valuable.
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 dense sentences, front-loaded with purpose and followed by caveats. It avoids repetition and wasted words, though the technical phrasing is somewhat compressed.
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?
An output schema exists, so return values need not be described. However, for a five-parameter tool with no annotations and only 40% schema coverage, the description leaves usage selection and parameter meaning largely unexplained.
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 only 40%, so the description should compensate but does not mention any parameter semantics. Terms like max_scan, max_chars, diagnostic_limit, and domain_dn are left entirely to the schema, and the required ntds_path is undocumented.
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 gives a specific verb and resource: read domain metadata and forest-root identification from offline NTDS. It is clear enough to distinguish from object lookup tools, though it does not explicitly name sibling alternatives such as ntds_get_trusts.
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 state when to use this tool versus alternatives or what prerequisites exist. It implies a domain-metadata read from an offline NTDS file, but offers no explicit selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ntds_get_object_by_samA
Read allowlisted offline NTDS metadata for one exact SAM name. Retained deleted/recycled matches are flagged; duplicate matches are explicit. Does not decrypt credentials or require SYSTEM.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Allowlisted metadata projection. Credential attributes are not exposed. | |
| max_scan | No | Maximum datatable records examined. Caps or schema uncertainty prevent complete-result claims. | |
| domain_dn | No | Optional exact, case-insensitive domain DN scope. | |
| max_chars | No | ||
| ntds_path | Yes | ||
| diagnostic_limit | No | ||
| sam_account_name | Yes | Required exact case-insensitive SAM account selector; no wildcard or account-list mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| objects | Yes | |
| returned | Yes | |
| matched_count | Yes | |
| scan_complete | No | |
| database_clean | No | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| schema_complete | No | |
| results_complete | Yes | |
| serialized_chars | Yes | |
| match_count_exact | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety profile: read-only metadata, allowlisted fields, no credential decryption, and no SYSTEM requirement. It also discloses edge-case behavior for deleted/recycled and duplicate matches. It does not cover permissions, scan limits, or error behavior in detail.
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?
Three compact sentences with the core operation and constraints front-loaded. No filler; each clause carries purpose, edge case, or safety 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?
Output schema exists so return values need not be explained, and the description adequately covers purpose and safety. However, for a 7-parameter tool with incomplete schema descriptions, it leaves several parameters and memory/scan-limit semantics unexplained.
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 schema has only 57% description coverage across 7 parameters. The description adds no syntax or meaning beyond the schema's own SAM selector and allowlist notes, and it says nothing about ntds_path, domain_dn, max_chars, diagnostic_limit, or max_scan limits.
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?
States a specific verb 'Read', resource 'allowlisted offline NTDS metadata', and exact selector 'one exact SAM name'. The SAM-name scope implicitly distinguishes it from sibling ntds_get_object_sid and other NTDS tools.
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?
Clearly implies use for exact SAM lookups and not for wildcard/list modes, and describes duplicate/deleted handling. Does not name an alternative when a SID lookup is needed, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ntds_get_object_sidA
Resolve an exact SAM selector to offline NTDS SID metadata. Reports not-found, ambiguity, and incomplete evidence explicitly; never selects an arbitrary duplicate.
| Name | Required | Description | Default |
|---|---|---|---|
| max_scan | No | Maximum datatable records examined. Caps or schema uncertainty prevent complete-result claims. | |
| domain_dn | No | Optional exact, case-insensitive domain DN scope. | |
| max_chars | No | ||
| ntds_path | Yes | ||
| diagnostic_limit | No | ||
| sam_account_name | Yes | Required exact case-insensitive SAM account selector; no wildcard or account-list mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| objects | Yes | |
| returned | Yes | |
| matched_count | Yes | |
| scan_complete | No | |
| database_clean | No | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| schema_complete | No | |
| results_complete | Yes | |
| serialized_chars | Yes | |
| match_count_exact | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses meaningful traits: it reports not-found, ambiguity, and incomplete evidence explicitly, and never selects an arbitrary duplicate. It does not state permissions, read-only status, or performance characteristics, but the ambiguity and duplicate-handling behavior is unusually well specified.
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 tightly written sentences with no wasted words. The main purpose is front-loaded, followed immediately by the key behavioral guarantee about ambiguity and duplicates.
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?
An output schema exists, so return values need not be explained. However, for a six-parameter forensic tool with only partial schema coverage, the description omits important input semantics and prerequisites around the offline NTDS path and scan limits, leaving the definition only minimally 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 description coverage is only 50%, and the description does not compensate for undocumented parameters such as max_chars, diagnostic_limit, and ntds_path. It reinforces the exact SAM selector requirement, but that is already in the schema, and other parameters like max_scan and domain_dn are left entirely to 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 states a clear verb and resource: resolve an exact SAM selector to offline NTDS SID metadata. It is specific enough to distinguish the operation from generic object lookup, but it does not explicitly differentiate itself from the sibling tool ntds_get_object_by_sam.
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?
Usage is implied: use this tool for exact SAM selector resolution to SID metadata. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternative sibling is named for cases where object lookup rather than SID resolution is wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ntds_get_trustsA
Read paginated offline trusted-domain metadata: partner, SID, direction/type/attributes, and provenance. Excludes trust authentication secrets; never replays logs or repairs the database.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| offset | No | ||
| max_scan | No | Maximum datatable records examined. Caps or schema uncertainty prevent complete-result claims. | |
| domain_dn | No | Optional exact, case-insensitive domain DN scope. | |
| max_chars | No | ||
| ntds_path | Yes | ||
| diagnostic_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| trusts | Yes | |
| returned | Yes | |
| next_cursor | Yes | |
| next_offset | Yes | |
| scan_complete | No | |
| database_clean | No | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| schema_complete | No | |
| results_complete | Yes | |
| serialized_chars | Yes | |
| total_matched_exact | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the operation is a read, that it is paginated, that trust authentication secrets are excluded, and that it never replays logs or repairs the database. It does not mention authentication requirements or rate limits, but the safety and scope traits are well covered.
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 tightly written sentences with no wasted words. The core read operation and its constraints are front-loaded, and the field enumeration is compact.
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 output schema exists, so return values need not be explained. The description covers behavior and scope well, but with 8 parameters and only 25% schema coverage, the parameter-level gaps leave an agent without enough detail to invoke the tool correctly. It is adequate but clearly incomplete for this complexity.
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 only 25% (only domain_dn and max_scan have descriptions). The description mentions 'paginated' which loosely implies limit/cursor/offset, but it does not explain ntds_path, max_chars, diagnostic_limit, or how pagination parameters interact. With such low schema coverage, the description fails to compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Read) and resource (offline trusted-domain metadata), and enumerates the returned fields (partner, SID, direction/type/attributes, provenance). It does not explicitly differentiate itself from sibling tools like ntds_get_domain_info or ntds_get_object_by_sam, so it falls short of a 5.
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 phrase 'offline trusted-domain metadata' implies the tool is used against parsed NTDS files, and 'Read paginated' implies a retrieval context. However, there is no explicit statement of when to use this tool versus alternatives (e.g., ntds_get_domain_info), nor any excluded scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_get_keyC
Get registry key and values from a hive file.
| Name | Required | Description | Default |
|---|---|---|---|
| key_path | Yes | ||
| hive_path | Yes | ||
| max_depth | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description is the sole source of behavioral context. It only says 'get', implying read-only, but does not clarify if it modifies the hive, requires special permissions, or how values are returned. The description is too brief to disclose important traits.
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, but it is concise. However, it lacks structure and could be expanded to include parameter details or usage notes without being 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 3 parameters, no output schema, and many sibling tools performing similar registry operations, the description is too sparse. It does not explain the return format, depth parameter behavior, or how values are presented, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the tool description adds no explanation of parameters (hive_path, key_path, max_depth). The name 'max_depth' is the only hint of functionality. The description fails to compensate for the poor schema documentation.
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 states 'Get registry key and values from a hive file', which clearly indicates the action and resource. However, it does not differentiate from sibling tools like registry_search or registry_get_network, which also deal with registry keys.
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 registry_search or registry_get_persistence. There is no mention of prerequisites or context where this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_get_networkC
Get network configuration from SYSTEM hive.
| Name | Required | Description | Default |
|---|---|---|---|
| system_hive | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states 'Get', implying a read operation. It does not disclose any side effects, required privileges, or potential errors. The agent cannot infer whether this tool is safe or what conditions might cause it to fail.
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, focused sentence with no redundant words. It is front-loaded with verb and resource, achieving maximum 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?
Given the lack of output schema and annotations, the description should explain what 'network configuration' comprises and the expected return format. It does not cover these, leaving significant ambiguity for the agent.
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 parameter 'system_hive' is required but receives no description in the schema or the tool description. The tool description mentions 'from SYSTEM hive' but does not clarify whether the parameter is a file path, registry path, or hive content. At 0% schema coverage, the description should compensate but fails to do so meaningfully.
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 ('Get') and the target ('network configuration from SYSTEM hive'), making the tool's purpose obvious. It distinguishes itself from sibling tools like registry_get_key or registry_get_system_info by focusing specifically on network settings.
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 (e.g., requiring an extracted SYSTEM hive) or scenarios where another tool might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_get_persistenceB
Get persistence mechanisms (Run keys, Winlogon values, services) from registry.
| Name | Required | Description | Default |
|---|---|---|---|
| ntuser_hive | No | ||
| system_hive | No | ||
| software_hive | No | ||
| include_microsoft_services | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral burden, but it only states the target artifact types. It does not disclose how the supplied hives are read or combined, the effect of the include_microsoft_services default, or the output shape, leaving key behavioral traits implicit.
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 filler and no duplicated schema content; the main artifact categories are front-loaded. It is short, but the brevity comes at the cost of important context that other dimensions have to account for.
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 four-parameter tool with no output schema, the description is too incomplete: it does not explain what the output looks like, how to choose hive paths, or when to set include_microsoft_services. An agent would need to rely on parameter names and potentially miss hidden assumptions.
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 0%, and the description adds no parameter-level meaning. It mentions 'registry' and 'services' only indirectly, while ntuser_hive, system_hive, software_hive, and include_microsoft_services remain undocumented except for their names.
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 ('Get') with a specific resource ('persistence mechanisms') and enumerates concrete artifact classes (Run keys, Winlogon values, services). This clearly separates it from sibling tools like registry_get_key and registry_get_system_info, which target different registry 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 use case is implied: call this when registry persistence mechanisms are needed. However, there is no explicit when/when-not guidance and no mention of alternatives such as registry_get_key or registry_search, so the agent must infer the applicable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_get_system_infoC
Get OS version, computer name, timezone from registry.
| Name | Required | Description | Default |
|---|---|---|---|
| system_hive | Yes | ||
| software_hive | Yes |
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 whether the operation is read-only, requires elevated privileges, or has side effects. It only states 'get... from registry', implying a read but without explicit confirmation.
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 sentence listing three specific outputs, which is concise. However, it omits necessary details, so it is not optimally structured for completeness.
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 (2 required parameters, no output schema), the description is incomplete. It does not explain what the parameters represent, what output to expect, or how to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has two parameters (software_hive, system_hive) with no descriptions, and the tool description does not explain their meaning or expected values (e.g., file paths). With 0% schema coverage, the description fails to compensate, leaving the agent without guidance on correct parameter usage.
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 OS version, computer name, and timezone from the registry. This distinguishes it from sibling tools that target other registry areas (e.g., network, users, persistence).
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 registry_get_key or registry_search. No preconditions, limitations, or when-not-to-use information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_get_usb_historyC
Get USBSTOR device identities and WPD names from SYSTEM hive. first_connected is the legacy USBSTOR key last-write timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| system_hive | Yes |
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 adds a useful nuance about first_connected being the legacy last-write timestamp, but does not explicitly state read-only behavior, permissions, error conditions, or what happens if the hive is invalid. 'Get' suggests a read, but this is not made 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?
The description consists of two clean sentences. The first sentence is the front-loaded purpose; the second adds a specific, non-redundant detail. No wasted 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 tool with no output schema and no annotations, the description is too thin. It does not describe the returned structure (e.g., list of objects with device identity, WPD name, timestamps), nor does it provide usage context or typical pitfalls. An agent would need to call it or rely on external knowledge to understand the result.
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 schema has 0% description coverage, so the description must compensate. It does clarify that system_hive refers to the SYSTEM hive and ties the output to USBSTOR/WPD data, but it does not specify the expected format (path, filename, mounted hive) or constraints. Partial value is added beyond the raw 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 a specific verb and resource: 'Get USBSTOR device identities and WPD names from SYSTEM hive.' This is distinct enough that an agent can tell it apart from generic registry query tools, though it does not explicitly compare with siblings like registry_query or registry_get_key.
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?
There is no guidance on when to use this tool versus the many available registry/forensic alternatives. The name implies a USB-history use case, but the description does not state a scenario or exclusion, leaving the agent to infer applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_get_usersC
Get user accounts from SAM hive.
| Name | Required | Description | Default |
|---|---|---|---|
| sam_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states the purpose without disclosing any behavioral traits such as whether the operation is read-only, error handling, 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 sentence with no wasted words, but its brevity sacrifices necessary detail. It is concise but not sufficiently informative.
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 no output schema, the description fails to indicate what the return value contains (e.g., list of usernames, SIDs). It also lacks details on the expected format of sam_path.
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 'sam_path' is not explained in the description. With 0% schema description coverage, the description adds no value beyond the schema, leaving the agent unsure what format or value to provide.
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 'Get' and the resource 'user accounts from SAM hive', which is specific and distinguishes it from sibling registry tools like registry_get_key.
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 vs alternatives such as registry_get_key or registry_search. The agent has no context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_queryA
Query registry values with exact, substring, or regex matching, subtree scope, field projection, and pagination. Returns results and total_matched over the readable subtree, with read diagnostics. Follow next_offset for the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | Return only selected fields; missing optional fields are omitted | |
| offset | No | ||
| pattern | Yes | ||
| hive_path | Yes | ||
| match_mode | No | substring | |
| search_data | No | ||
| search_names | No | ||
| case_sensitive | No | ||
| key_path_prefix | No | Whole subtree key, hive-relative or including root name | |
| diagnostic_limit | No | Maximum read-error details; read_errors always counts all errors |
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 explicitly mentions that results are limited to the 'readable subtree' (implying permission-based filtering), that it returns diagnostics for read errors, and that pagination is done via next_offset. This adds meaningful context beyond the schema, though it does not explicitly state it is a read-only operation (though implied by 'query').
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 the first sentence listing core capabilities and the second describing output and pagination. It is front-loaded with the most important information and contains no fluff. Every clause adds value.
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 (11 parameters, no output schema), the description is not fully complete. It covers the main features but leaves details like how to specify hive_path, the exact behavior of search_data vs search_names, and the meaning of case_sensitive to inference. An agent might need additional context to use the tool correctly, especially since the schema descriptions are sparse. However, the description does convey the essential workflow (query, read diagnostics, paginate).
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 only 27% (3 of 11 parameters have descriptions). The description provides a high-level overview of capabilities (e.g., 'exact, substring, or regex matching' maps to match_mode, 'field projection' maps to fields, 'pagination' maps to limit/offset), but it does not explain individual parameters like search_data, search_names, case_sensitive, or diagnostic_limit. Since the schema is sparse, the description only partially compensates, leaving some parameters underspecified.
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: querying registry values with exact, substring, or regex matching, and lists key capabilities like subtree scope, field projection, and pagination. This distinguishes it from siblings like registry_get_key (which likely retrieves a specific key) and registry_search (which may search for keys or values) by focusing on value-level querying with multiple match modes.
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 when to use this tool by mentioning specific features (matching modes, projection, pagination), but it does not explicitly differentiate it from the sibling registry_search or other registry tools. It does not state when to prefer this over alternatives, leaving the agent to infer from the feature list. A clearer 'use this for X, use registry_search for Y' would be more helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_searchC
Search registry values by pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| pattern | Yes | ||
| hive_path | Yes | ||
| search_data | No | ||
| search_names | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It only says 'Search,' implying read-only, but does not disclose if the tool modifies state, requires special permissions, or returns results with specific structure. Minimal behavioral insight.
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 sentence, which is concise but lacks structure. It is too brief to convey necessary information, and could be expanded with bullet points or clarifications without losing 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?
With 5 parameters, no output schema, and no annotations, the description is severely incomplete. It fails to explain the input format, return value, or constraints like limit behavior. The tool requires much more context for correct 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 0%, meaning 5 parameters are entirely undocumented. The description only mentions 'by pattern,' weakly relating to the pattern parameter. No explanation for hive_path, search_names, search_data, or limit.
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 'Search' and resource 'registry values by pattern.' It implies pattern-based searching, which distinguishes it from sibling tools that retrieve specific keys or network-related info. However, it does not explicitly differentiate from other search tools like registry_get_key.
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 usage guidance is provided. The description does not mention when to use this tool versus alternatives such as registry_get_key or evtx_search. There is no context on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_descriptor_decodeA
Decode bounded self-relative Windows security-descriptor bytes from explicit hex or base64. Reports owner/group, ACL states, ACE masks/SIDs and structural diagnostics; does not infer effective access.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Explicitly encoded self-relative security descriptor, at most 65536 decoded bytes. | |
| encoding | Yes | Explicit representation of the descriptor bytes. No encoding guessing or SDDL conversion. | |
| max_aces | No | Global emitted-ACE cap across SACL and DACL. The complete bounded input is still structurally validated; omissions are explicit. | |
| max_chars | No | Description budget; if too small, reduce max_aces or increase max_chars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dacl | No | |
| sacl | No | |
| group | No | |
| owner | No | |
| parse_errors | Yes | |
| parse_status | Yes | |
| parse_complete | Yes | |
| returned_chars | Yes | |
| payload_clipped | Yes | |
| serialized_chars | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral context, and it does: it is a bounded decode, reports structural diagnostics, and explicitly states it does not infer effective access. It does not describe potential side effects, permissions, or failure modes, but for a purely analytical decode tool this is reasonably transparent.
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, front-loaded with the core action, and each clause adds distinct value: decode operation, input formats, reported outputs, and scope limitation. No filler 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 the presence of a full output schema and 100% parameter schema coverage, the description need not detail return values or parameter constraints. It covers the tool's scope and limits well, though it could more explicitly route the agent when raw bytes are not available.
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 100%, so the schema already documents all four parameters thoroughly, including limits and defaults. The description adds only the broad input-format constraint ('explicit hex or base64'), which is already in the schema, so 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 states a specific verb and resource: 'Decode bounded self-relative Windows security-descriptor bytes from explicit hex or base64.' It also names the exact output content (owner/group, ACL states, ACE masks/SIDs, structural diagnostics), so an agent can tell what this tool does without opening the schema.
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 tells the agent the required input formats ('explicit hex or base64') and scope ('does not infer effective access'), which implies usage. However, it does not name an alternative tool or state when to prefer this over related tools such as evtx_describe_security_descriptor, leaving the usage decision partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_parse_lnk_filesB
Parse Windows shortcut (.lnk) files to determine target paths, access times, and volume information. Answers: What files did the user access recently? What were the original file locations?
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .lnk file, directory containing .lnk files, or user profile path | |
| limit | No | Maximum number of results | |
| recursive | No | Search recursively in subdirectories | |
| recent_only | No | Only search the user's Recent folder (requires user profile path) | |
| target_filter | No | Filter by target path (case-insensitive substring) | |
| extension_filter | No | Filter recent files by extension (e.g., '.exe', '.ps1') |
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 the tool parses .lnk files but does not disclose whether it is read-only, any side effects, required permissions, or output format. For a parsing tool, it is likely non-destructive, but this is not confirmed.
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: first defines the core function, second poses guiding questions. No extraneous words. Could potentially blend the second sentence into the first for even tighter structure, but overall it is clear and 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?
Given no output schema and six parameters, the description is incomplete. It does not explain the output fields or format, nor does it provide usage examples or guidance on parameter combinations. The tool is specialized but the description leaves the agent guessing about return value structure.
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%, baseline is 3. The description does not add new semantics beyond the schema; it merely repeats the purpose. The guiding questions hint at usage of parameters like 'recent_only' but do not elaborate on parameter relationships or provide examples.
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 parses Windows shortcut (.lnk) files to extract target paths, access times, and volume information. It answers specific investigative questions about user file access and original locations, distinguishing it from sibling tools that deal with other data sources like registry or event 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 provides implicit guidance through the questions it answers, suggesting when one might use it (e.g., to find recently accessed files or original locations). However, it lacks explicit when-to-use or when-not-to-use criteria nor does it reference alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_parse_shellbagsA
Parse ShellBags to reveal folder navigation history, including UNC network shares and the interior of ZIP archives browsed in Explorer. Parses BOTH the UsrClass.dat BagMRU and the matching NTUSER.DAT BagMRU (auto-detected), since some entries exist in only one hive. Reports long folder names, created/modified times and 'last_viewed' (last interacted). Answers: Which folders did the user access? When did they browse suspicious paths? What network shares and archives did they open?
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| ntuser_path | No | Optional explicit path to the profile's NTUSER.DAT. Auto-detected from the UsrClass.dat location when omitted. | |
| path_filter | No | Filter results by path substring (case-insensitive) | |
| usrclass_path | Yes | Path to UsrClass.dat (typically in Users/<user>/AppData/Local/Microsoft/Windows/UsrClass.dat). An NTUSER.DAT path is also accepted. | |
| include_ntuser | No | Also parse the NTUSER.DAT BagMRU (Desktop namespace, where network share browsing is often recorded). Set false to parse only the given hive. | |
| suspicious_only | No | Only return suspicious folder accesses (temp, AppData, network shares, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool parses both hives, auto-detects NTUSER.DAT, handles ZIP archives, and reports timestamps. It implies a read-only, non-destructive operation. However, it does not mention potential failure modes, access requirements, 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?
The description is concise at six sentences, front-loaded with the primary action. Every sentence adds unique value: artifact type, data sources, capabilities, and the questions it answers. No fluff or repetition.
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 tool has 6 parameters and no output schema. The description explains the artifact and the types of data returned (folder names, times, last_viewed) but does not describe the exact output structure (e.g., list of objects with fields per result). It also does not explain how parameters like 'limit' or 'path_filter' affect the output. For a tool with no output schema, the description should be more explicit about return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the significance of parsing both hives and the auto-detection logic, which maps to the 'include_ntuser' and 'ntuser_path' parameters. It also provides context for the output fields, helping the agent understand the meaning of parameters like 'suspicious_only' and 'path_filter'.
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 parses ShellBags to reveal folder navigation history, including UNC shares and ZIP archives. It specifies parsing both UsrClass.dat and NTUSER.DAT with auto-detection, and explicitly answers the questions the tool addresses. This is a specific verb+resource combination that distinguishes it from sibling tools like user_parse_lnk_files.
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 clear context for when to use the tool (when investigating folder access history, network shares, archives) but does not explicitly state when not to use it or mention alternatives. The agent can infer usage from the listed questions, but no direct guidance on sibling tools or exclusion criteria is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
windows_search_parseA
Parse an explicit Windows Search EDB using SIDR 0.9.2. Returns file, internet history, and activity history reports with extraction completeness and evidence hashes. Uses a partial PropertyStore fallback if SIDR is absent. Text filters are case-insensitive substrings combined with AND. Time bounds are inclusive UTC: file DateModified, internet Link_DateVisited, activity StartTime. Incomplete zero results are not conclusive.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Search all raw report fields | |
| fields | No | Raw field names plus report_type | |
| offset | No | ||
| timeout | No | ||
| work_id | No | ||
| edb_path | Yes | Explicit Windows Search EDB file | |
| time_end | No | ISO timestamp; naive means UTC | |
| sidr_path | No | Optional SIDR executable path | |
| time_start | No | ISO timestamp; naive means UTC | |
| path_filter | No | ||
| report_type | No | all | |
| content_filter | No | Search System_Search_AutoSummary | |
| filename_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the SIDR version, the PropertyStore fallback when SIDR is absent, case-insensitive AND-combined text filtering, inclusive UTC time bounds mapped to specific fields, and the caveat that incomplete zero results are not conclusive.
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?
Four sentences deliver a high density of useful information with no filler. The most important scoping and output facts come first, followed by filter, time, and reliability caveats.
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 14-parameter tool with no output schema and no annotations, the description is strong: it covers inputs, outputs, fallback behavior, filter semantics, time semantics, and result reliability. It does not describe the exact output shape or error conditions, but an agent has enough to select and invoke it correctly.
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 only 50%, and the description compensates for several otherwise unexplained parameters: it defines text filter behavior (case-insensitive substring AND), time semantics (inclusive UTC), and the fields each time bound applies to. Common control parameters like limit, offset, and timeout are left to their schema defaults, but the core forensic parameters are clarified.
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 opens with a specific verb and resource: 'Parse an explicit Windows Search EDB using SIDR 0.9.2.' It also names the report types returned (file, internet history, activity history), which distinguishes it from sibling parsers aimed at other artifacts such as Prefetch, AMCache, or SRUM.
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?
It clearly scopes usage to explicit Windows Search EDB files and explains the SIDR dependency with a fallback. It does not explicitly name alternative tools or state when not to use it, but the artifact-specific wording gives enough contextual guidance.
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.
12 tool updates
v1.5.0- Added
evtx_correlate_logon_id - Added
evtx_describe_security_descriptor - Added
evtx_export - Added
evtx_get_event - Added
evtx_ntlm_operational_summary - Changed
evtx_search14 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Compact rows with event references; selects structured output by default.", + "type": "boolean" +} - added
Input schema / properties / cursorAdded value: +{ + "description": "Continuation bound to the same source and query. Do not combine with offset.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "System fields, dotted EventData/UserData paths, or unambiguous aliases.", + "items": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - removed
Input schema / properties / limit / descriptionRemoved value: -"Max results to return (default 50)" - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / max_charsAdded value: +{ + "description": "MCP result JSON character budget, including metadata; default 12000 compact, otherwise 40000.", + "maximum": 40000, + "minimum": 1024, + "type": "integer" +} - added
Input schema / properties / max_scanAdded value: +{ + "default": 100000, + "description": "Maximum source records examined. A capped result reports an inexact total.", + "maximum": 1000000, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / offset / descriptionRemoved value: -"Skip first N matches for pagination" - added
Input schema / properties / offset / minimumAdded value: +0 - added
Input schema / properties / output_formatAdded value: +{ + "description": "Defaults to structured for compact queries, otherwise legacy JSON text.", + "enum": [ + "text", + "structured" + ], + "type": "string" +} - added
Input schema / properties / timestamp_precisionAdded value: +{ + "default": "full", + "description": "both adds timestamp_second in UTC without changing TimeCreated.", + "enum": [ + "full", + "both" + ], + "type": "string" +} - added
Input schema / properties / whereAdded value: +{ + "additionalProperties": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "eq": { + "type": [ + "string", + "number", + "boolean", + "null" + ] + }, + "exists": { + "type": "boolean" + }, + "gt": { + "type": [ + "number", + "string" + ] + }, + "gte": { + "type": [ + "number", + "string" + ] + }, + "in": { + "items": { + "type": [ + "string", + "number", + "boolean", + "null" + ] + }, + "maxItems": 1000, + "minItems": 1, + "type": "array" + }, + "lt": { + "type": [ + "number", + "string" + ] + }, + "lte": { + "type": [ + "number", + "string" + ] + }, + "neq": { + "type": [ + "string", + "number", + "boolean", + "null" + ] + } + }, + "type": "object" + }, + "description": "Field-specific AND predicates. Missing fields fail comparisons, including neq. Use exists for presence; ordering uses numeric operands or aware ISO timestamps on TimeCreated.", + "maxProperties": 64, + "propertyNames": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "type": "object" +} - added
Input schema / properties / where_case_sensitiveAdded value: +{ + "default": true, + "type": "boolean" +}
- Changed
evtx_security_search14 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Compact rows with event references; selects structured output by default.", + "type": "boolean" +} - added
Input schema / properties / cursorAdded value: +{ + "description": "Continuation bound to the same source and query. Do not combine with offset.", + "maxLength": 4096, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "description": "System fields, dotted EventData/UserData paths, or unambiguous aliases.", + "items": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - removed
Input schema / properties / limit / descriptionRemoved value: -"Max results to return (default 50)" - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / max_charsAdded value: +{ + "description": "MCP result JSON character budget, including metadata; default 12000 compact, otherwise 40000.", + "maximum": 40000, + "minimum": 1024, + "type": "integer" +} - added
Input schema / properties / max_scanAdded value: +{ + "default": 100000, + "description": "Maximum source records examined. A capped result reports an inexact total.", + "maximum": 1000000, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / offset / descriptionRemoved value: -"Skip first N matches for pagination" - added
Input schema / properties / offset / minimumAdded value: +0 - added
Input schema / properties / output_formatAdded value: +{ + "description": "Defaults to structured for compact queries, otherwise legacy JSON text.", + "enum": [ + "text", + "structured" + ], + "type": "string" +} - added
Input schema / properties / timestamp_precisionAdded value: +{ + "default": "full", + "description": "both adds timestamp_second in UTC without changing TimeCreated.", + "enum": [ + "full", + "both" + ], + "type": "string" +} - added
Input schema / properties / whereAdded value: +{ + "additionalProperties": { + "additionalProperties": false, + "minProperties": 1, + "properties": { + "eq": { + "type": [ + "string", + "number", + "boolean", + "null" + ] + }, + "exists": { + "type": "boolean" + }, + "gt": { + "type": [ + "number", + "string" + ] + }, + "gte": { + "type": [ + "number", + "string" + ] + }, + "in": { + "items": { + "type": [ + "string", + "number", + "boolean", + "null" + ] + }, + "maxItems": 1000, + "minItems": 1, + "type": "array" + }, + "lt": { + "type": [ + "number", + "string" + ] + }, + "lte": { + "type": [ + "number", + "string" + ] + }, + "neq": { + "type": [ + "string", + "number", + "boolean", + "null" + ] + } + }, + "type": "object" + }, + "description": "Field-specific AND predicates. Missing fields fail comparisons, including neq. Use exists for presence; ordering uses numeric operands or aware ISO timestamps on TimeCreated.", + "maxProperties": 64, + "propertyNames": { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + "type": "object" +} - added
Input schema / properties / where_case_sensitiveAdded value: +{ + "default": true, + "type": "boolean" +}
- Added
ntds_get_domain_info - Added
ntds_get_object_by_sam - Added
ntds_get_object_sid - Added
ntds_get_trusts - Added
security_descriptor_decode
4 tool updates
v1.4.5- Changed
disk_parse_srum7 fields changed- added
Input schema / properties / aggregate_byAdded value: +{ + "default": "none", + "description": "Network tables only (network_data_usage or all). Adds aggregates over all matching rows, independent of the entries limit. Existing entries remain in the response.", + "enum": [ + "none", + "application", + "user", + "interface", + "application_user", + "application_interface" + ], + "type": "string" +} - changed
Input schema / properties / app_filter / descriptionPrevious value: -"Filter by application name (case-insensitive substring)"New value: +"Application filter; interpreted using app_match_mode" - added
Input schema / properties / app_match_modeAdded value: +{ + "default": "substring", + "description": "Case-insensitive matching. Exact basename compares only the executable filename; exact path normalizes case and slashes. Regex searches the raw application name and executable.", + "enum": [ + "substring", + "exact_basename", + "exact_path", + "regex" + ], + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of entries to return"New value: +"Maximum entries; all uses limit // 2 per table. Does not limit aggregate inputs." - added
Input schema / properties / limit / minimumAdded value: +0 - changed
Input schema / properties / time_range_end / descriptionPrevious value: -"ISO format datetime - filter entries before this time"New value: +"Inclusive ISO end for both tables; naive times use UTC" - changed
Input schema / properties / time_range_start / descriptionPrevious value: -"ISO format datetime - filter entries after this time"New value: +"Inclusive ISO start for both tables; naive times use UTC"
- Changed
file_analyze_pe1 field changed- changed
Input schema / properties / check_signatures / descriptionPrevious value: -"Check for known packer/crypter signatures"New value: +"Inspect Authenticode metadata and known packer/crypter signatures"
- Added
registry_query - Added
windows_search_parse
1 tool update
v1.4.1- Changed
user_parse_shellbags3 fields changed- added
Input schema / properties / include_ntuserAdded value: +{ + "default": true, + "description": "Also parse the NTUSER.DAT BagMRU (Desktop namespace, where network share browsing is often recorded). Set false to parse only the given hive.", + "type": "boolean" +} - added
Input schema / properties / ntuser_pathAdded value: +{ + "description": "Optional explicit path to the profile's NTUSER.DAT. Auto-detected from the UsrClass.dat location when omitted.", + "type": "string" +} - changed
Input schema / properties / usrclass_path / descriptionPrevious value: -"Path to UsrClass.dat (typically in Users/<user>/AppData/Local/Microsoft/Windows/UsrClass.dat)"New value: +"Path to UsrClass.dat (typically in Users/<user>/AppData/Local/Microsoft/Windows/UsrClass.dat). An NTUSER.DAT path is also accepted."
3 tool updates
v1.4.0- Changed
disk_parse_mft1 field changed- changed
Input schema / properties / file_path_filter / descriptionPrevious value: -"Filter by file path (case-insensitive substring)"New value: +"Filter by file path, ADS name/path, or resident ADS content (case-insensitive substring)"
- Added
hunt_ioc_pack - Added
ioc_pack_list
30 tool updates
v1.3.0- Added
api_analyze_imports - Added
api_detect_patterns - Added
api_lookup - Added
api_search_category - Added
apmx_calls_around - Added
apmx_correlate_handles - Added
apmx_detect_patterns - Added
apmx_get_call_details - Added
apmx_get_calls - Added
apmx_injection_info - Added
apmx_parse - Added
apmx_search_params - Added
browser_get_history - Added
build_timeline - Added
disk_parse_amcache - Added
disk_parse_mft - Added
disk_parse_prefetch - Added
disk_parse_srum - Added
disk_parse_usn_journal - Added
evtx_attack_summary - Changed
evtx_search3 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -100New value: +40 - added
Input schema / properties / limit / descriptionAdded value: +"Max results to return (default 50)" - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Skip first N matches for pagination", + "type": "integer" +}
- Changed
evtx_security_search3 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -100New value: +40 - added
Input schema / properties / limit / descriptionAdded value: +"Max results to return (default 50)" - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Skip first N matches for pagination", + "type": "integer" +}
- Added
file_analyze_pe - Added
hunt_ioc - Added
ingest_parsed_csv - Added
investigate_execution - Added
investigate_user_activity - Changed
registry_search1 field changed- changed
Input schema / properties / limit / defaultPrevious value: -100New value: +50
- Added
user_parse_lnk_files - Added
user_parse_shellbags
14 tool updates
v1.0.0- First observed
evtx_explain_event_id - First observed
evtx_get_stats - First observed
evtx_list_files - First observed
evtx_search - First observed
evtx_security_search - First observed
forensics_list_important_events - First observed
forensics_list_registry_keys - First observed
registry_get_key - First observed
registry_get_network - First observed
registry_get_persistence - First observed
registry_get_system_info - First observed
registry_get_usb_history - First observed
registry_get_users - First observed
registry_search
TDQS
Scored across 55 tools
Several tools have overlapping purposes, such as api_analyze_imports vs api_detect_patterns, evtx_search vs evtx_security_search, and registry_query vs registry_search vs registry_get_key. Descriptions help distinguish them, but the volume of similar-sounding tools creates moderate ambiguity.
Most tool names follow a snake_case pattern with domain prefixes (e.g., api_, apmx_, evtx_, registry_, disk_parse_). A few tools lack a domain prefix (build_timeline, hunt_ioc, investigate_execution), but overall naming is predictable and readable.
With 55 tools, the server is far above the typical 3-15 range and exceeds the 25-tool threshold for 'too many.' While the broad forensics domain justifies many tools, the count is heavy and likely to overwhelm agents.
The server covers a wide range of Windows forensic artifacts (API captures, NTDS, EVTX, registry, disk, user activity, browser). Minor gaps exist, such as no ShimCache, Jump List, or Recycle Bin parsing, and no acquisition tools, but core parsing and analysis needs are well met.
Maintenance
Related MCP Connectors
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
55 tools, 7 Resources, Sigma rules, email SPF/DMARC, MITRE, CVE/KEV, risk_score. No key.
Offline methodology engine for authorized penetration testing, CTF, and security research.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables autonomous digital forensics and incident response through 21 typed forensic tools covering disk, memory, registry, network, timeline, carving, and patterns, integrated with AI-driven reasoning and self-correction.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to perform digital forensics analysis including memory analysis, file metadata inspection, and threat-intelligence lookups.2 npmISC
- AlicenseNot gradedqualityBmaintenanceEnables Windows event log forensics by wrapping Hayabusa, offering EVTX scanning, Sigma rule exploration, ATT&CK coverage analysis, and detection engineering resources.MIT
- FlicenseAqualityCmaintenanceEnables AI agents to perform digital forensics and incident response tasks by dynamically discovering and utilizing host tools for memory analysis, metadata extraction, threat detection, and file dissection.51-