Autonomous DFIR agent: read-only SANS SIFT forensic tools over MCP, with architectural guardrails and a hash-chained audit trail.
Spoor-sift provides 12 forensic tools with consistent naming (verb_noun pattern: vol_*, tsk_*, regripper_run, hash_file, yara_scan, log2timeline_run, psort_query) and descriptions (avg ~120 chars). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented, LLMs cannot predict return structure. Error handling returns structured dicts with hints but lacks categorization (retryable vs fatal). No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Parameter descriptions are adequate but lack format constraints (e.g., vol_netscan state param has no enum). Missing pagination guidance for tools that cap results server-side.
MD5 + SHA-256 of an evidence file or extracted artifact (computed in-process, audited) — fingerprint suspected binaries for IOC lists.
Build a plaso super-timeline from an evidence source into the workspace (name must end .plaso). Run ONCE per source, then slice with psort_query.
Slice a built .plaso super-timeline (optional plaso filter expression, e.g. "date > '2020-09-19 02:00:00'"); events are capped server-side.
Run a RegRipper plugin against a registry hive — in evidence or extracted into the workspace (e.g. plugin 'run' for autostart persistence, 'userassist' for execution history).
List filesystem entries from a disk image, deleted files included (Sleuth Kit fls). Use offset for a partition's sector offset; inode to list one directory.
Extract a file from a disk image by inode into the analyst workspace (Sleuth Kit icat); returns its SHA-256 — custody sealed at extraction.
Output schemas not documented. LLMs cannot predict return structure (fields, types, pagination). Tools cap results server-side but do not document what fields are returned or how to chain results to downstream tools.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools declare Risk profile (READ_ONLY, WRITE) in comments but MCP spec requires tool annotations for LLM safety and planning.
Parameter constraints missing. vol_netscan 'state' param accepts free-form strings (should be enum: ESTABLISHED, LISTEN, etc). max_rows lacks min/max bounds. regripper_run 'plugin' param has no enum of valid plugins.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Process command-line arguments — inspect launch args (windows.cmdline).
Injected / hidden executable code regions (windows.malfind).
Network connections/sockets from memory — find C2 (windows.netscan). Pool scans surface thousands of stale rows: pass state='ESTABLISHED' to see live connections first; duplicates are collapsed and rows capped server-side.
List processes from a Windows memory image (Volatility 3 windows.pslist).
Process tree with parent/child links — spot anomalous parents (windows.pstree).
Scan an evidence file/dir — or an artifact extracted into the workspace (e.g. tsk_icat's extracted_to path) — with YARA rules from the workspace; returns matching rule names per path.
Error handling returns structured dicts but lacks categorization. Errors are not classified as retryable, user-fixable, or fatal. LLM cannot determine whether to retry, ask user, or abort.
Pagination not documented. Tools cap results server-side (vol_netscan max_rows=300, psort_query max_events=200) but do not document whether results are truncated, how to fetch next page, or total count.