Skip to main content
Glama

Search extracted files and scan verdicts

malcolm_file_scans
Read-only

List files Zeek observed on the wire with hashes and Strelka scan verdicts. Filter by hash, MIME type, or time to investigate file detections.

Instructions

List the files Zeek saw cross the wire, with their hashes and scan verdicts.

    Use this for any file-centric question — it filters event.dataset=files
    for you and returns one compact row per file instead of the multi-KB raw
    document. Use malcolm_search instead for any other record type (conn,
    dns, http); search_dsl for a substring or wildcard filename match, which
    Malcolm's exact-match filters cannot express; arkime_file_by_hash to
    pull bytes by a hash Arkime recorded on a session rather than by Zeek's
    file record.

    Both record types Malcolm files under this dataset are returned, so one
    file can come back as two rows: Zeek's record of the transfer, and
    Strelka's scan verdict, which is the only row `scan_hits` appears on —
    0 there means Strelka scanned the file and matched nothing. A row's
    `extracted` value is the argument malcolm_extract_file takes; a row
    carrying `note` instead was seen on the wire but is not on disk.

    No match returns a sentence saying so, naming the field if a filter used
    one Malcolm does not index, rather than an empty list. Field names are
    in the output schema.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMax file records to return.
filtersNoExtra JSON filters in Malcolm filter syntax (see malcolm_search), merged on top of this tool's own. E.g. {"source.ip":"192.0.2.7"}; {"network.protocol":"smb"}. Values are matched EXACTLY — no wildcards.{}
time_toNoEnd time, dateparser format. Empty = now.
file_hashNoPivot from a hash IOC to the file records carrying it. Matched on related.hash, which holds md5, sha1, sha256, ssdeep and tlsh together, so any of those works, in either case (a tlsh is stored uppercase by Zeek and lowercase by Strelka; both are searched). One file usually has many records — one per session that carried it, plus a scan record — and they can exceed limit; add {"event.dataset":"strelka"} to filters to see the scan verdict on its own. Empty = no hash filter.
mime_typeNoExact file.mime_type value, or several comma-separated (OR). E.g. "application/x-dosexec"; "image/png,image/jpeg". Note Malcolm records PE executables as application/x-dosexec, not application/x-msdownload. Overrides executables_only when both are given. Empty = any type.
time_fromNoStart time, dateparser format ("2024-01-01", "7 days ago"). Empty = ALL history.
executables_onlyNoShortcut for the eight MIME labels that mean a native executable — PE, ELF (including the x-sharedlib every PIE binary gets), and Mach-O — in both the Zeek and the Strelka vocabulary. Use when hunting dropped binaries. A deployment can still use a label outside that set; if this returns nothing, check malcolm_field_values(field="file.mime_type").

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds substantial behavioral context beyond that: dual record types (Zeek transfer vs Strelka scan verdict), meaning of scan_hits, the extracted field as an argument for malcolm_extract_file, note rows, and the no-match sentence behavior. This is exactly the kind of contextual disclosure that helps an agent anticipate tool output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though longer than two sentences, each sentence earns its place: purpose, alternatives, dual-record caveat, scan_hits semantics, extracted/note distinction, and no-match behavior. It is front-loaded with the core purpose and then expands logically. No filler or redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, no required params, a rich output schema, and many sibling tools, the description covers the essential nuances: what record types are included, how scan_hits behaves, how to use extracts, what no-match returns, and how this tool relates to alternatives. It is complete enough for an agent 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.

Parameters3/5

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 parameter-level detail beyond what the schema already provides (e.g., file_hash semantics, executables_only shortcut). It does mention that field names are in the output schema, but this is not parameter-specific. The schema itself carries the parameter documentation burden, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb+resource+scope: 'List the files Zeek saw cross the wire, with their hashes and scan verdicts.' It clearly states what the tool does and distinguishes it from siblings by explicitly naming alternatives (malcolm_search, search_dsl, arkime_file_by_hash) and their different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('Use this for any file-centric question') and explicitly names alternatives for other record types, substring/wildcard matching, and hash-based byte retrieval. It also explains the dual-row behavior and when one might see two rows per file, which is crucial for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nagameTW/mcp-server-malcolm'

If you have feedback or need assistance with the MCP directory API, please join our Discord server