Mcp Server Malcolm

io.github.nagameTWPublished by GitHub account nagameTWv1.2.1Updated Oct 24, 2026

MCP server for Malcolm (Zeek/Suricata/Arkime/OpenSearch): threat-hunting access for AI agents

Overview

AI-generated overview

Local MCP server that gives an AI assistant read access to a Malcolm threat-hunting stack (Zeek, Suricata, Arkime, OpenSearch) for network traffic and alert tri

What you can do
Search and aggregate network traffic and Suricata alerts with Malcolm filter syntax, or run raw OpenSearch DSL queries, counts, index listings and cluster health checks
When to use it
Useful when you already run Malcolm and want an assistant to hunt through traffic, alerts, Arkime sessions and carved files, or to check sensor and service health, without writing queries by hand.
Requirements
Python 3.11 or newer, installed from PyPI or source, launched by an MCP client over stdio. A reachable Malcolm instance with API access over HTTPS, configured through MALCOLM_URL (or MALCOLM_BASE_URL), MALCOLM_USERNAME, MALCOLM_PASSWORD and optionally MALCOLM_SSL_VERIFY, MALCOLM_TIMEOUT, MALCOLM_MAX_CONCURRENCY and MALCOLM_MAX_REQUESTS_PER_MINUTE. NetBox lookups need a NetBox endpoint.
Before you install
The server holds Malcolm basic-auth credentials in its environment; the README notes the password ends up in cleartext in client config files and in docker inspect output. Defaults are admin/admin against so set them explicitly. Disabling TLS verification sends credentials and results over an unauthenticated channel. Write classes (alerting, Arkime tags, hunt jobs, PCAP upload, Arkime views) are off by default; enabling them lets the assistant change data. Carved files may be

Installation

In SourceWeft

  1. Open Mcp Server Malcolm in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Malcolm MCP Server lets an AI agent ask questions about the traffic in your Malcolm instance. The server uses the field names and the filter syntax that Malcolm uses. The agent does not guess them. It works with any MCP client, such as Claude Code, Claude Desktop or Cursor.

Example requests, and the tools that answer them:

  • "Show every Suricata alert involving 192.0.2.15 in the last 24 hours, and which NetBox device owns that IP." This calls malcolm_alerts and malcolm_netbox_lookup.
  • "Who were the top talkers by protocol over the last hour?" This calls malcolm_aggregate.
  • "List the executables Zeek carved out of yesterday's traffic, with their hashes." This calls malcolm_file_scans.
  • "Upload this PCAP, then hunt the stored packets for this string." This calls malcolm_upload_pcap and arkime_create_hunt. Both are write tools, and they are off by default.

A recorded session shows an agent answering a question about Modbus alerts.

Requirements

  • Python 3.11 or newer.
  • A Malcolm instance with API access, reachable over HTTPS.
  • An MCP client.

Quick start

1. Install the server. Then start it with stdin closed. It prints the state of the write classes and exits with code 0.

bash
pip install mcp-server-malcolmmcp-server-malcolm < /dev/null# [mcp-server-malcolm] write classes: alerting=off arkime-tag=off hunt-job=off pcap-upload=off arkime-view=off

2. Register it with Claude Code. Replace the values with your own.

bash
claude mcp add malcolm \  -e MALCOLM_URL=https://malcolm.example \  -e MALCOLM_USERNAME=analyst \  -e MALCOLM_PASSWORD='your-password' \  -e MALCOLM_SSL_VERIFY=/path/to/malcolm-ca.crt \  -- mcp-server-malcolm

Everything after -- is the launch command. Each -e sets one environment variable for it. A password typed in this command stays in your shell history. The install page shows how to avoid that. It also covers other MCP clients and other ways to install.

3. Check the connection. Ask the agent to call malcolm_ping. If the call fails, read Troubleshooting. A self-signed certificate is the most common cause.

Connection settings

VariableDefaultMeaning
MALCOLM_URLhttps://localhostBase URL of Malcolm
MALCOLM_USERNAMEadminBasic-auth user
MALCOLM_PASSWORDadminBasic-auth password
MALCOLM_SSL_VERIFYtruetrue, false, or the path of a CA bundle

Malcolm ships a self-signed certificate. For a remote Malcolm, point MALCOLM_SSL_VERIFY at the CA bundle. The certificate must carry a subjectAltName that matches the host name. The certificate that Malcolm's own setup generates has none, so install one that does. Use false only on an isolated lab machine. The configuration page lists every variable.

Read-only by default

The write tools come in five classes, and each class has one flag. The server registers only read tools until you set a flag. A class that is off is not registered. Its tools do not appear in tools/list.

ClassFlagTools
alertingMALCOLM_MCP_ENABLE_ALERTINGmalcolm_create_alert
arkime-tagMALCOLM_MCP_ENABLE_ARKIME_TAGSarkime_add_tags
hunt-jobMALCOLM_MCP_ENABLE_HUNT_JOBSarkime_create_hunt, arkime_cancel_hunt
pcap-uploadMALCOLM_MCP_ENABLE_PCAP_UPLOADmalcolm_upload_pcap
arkime-viewMALCOLM_MCP_ENABLE_ARKIME_VIEWSarkime_create_view, arkime_create_shortcut

A flag is on only when its value is true. Every write attempt writes one audit line, to stderr or to the file in MALCOLM_MCP_AUDIT_FILE. The security page describes the model.

Tools

The server has 51 read tools. They cover Malcolm filter queries, aggregation, field lookup, Arkime sessions and packets, NetBox, Zeek file scans, saved objects and alerting monitors. The tools page lists them all.

The tool schemas use about 34,000 tokens in every session. To save tokens, set MALCOLM_MCP_DISABLE_READ_GROUPS to the groups you do not need. For example, netbox,dashboards,detections,arkime-inventory leaves 34 tools. See Trimming the read surface.

Non-goals

Version 1 leaves these out on purpose:

  • Destructive writes (Arkime session delete, tag removal, user management).
  • Raw OpenSearch write or raw NetBox CRUD passthrough, behind a flag or otherwise.
  • The streamable-http transport (stdio only).

Repository structure

├── src/mcp_server_malcolm/    # The server│   ├── server.py              #   Registers the tools, applies the write gate│   ├── client.py              #   HTTP client for Malcolm│   ├── config.py              #   Write-class flags│   ├── audit.py               #   Audit output│   └── tools/                 #   Read tools. Write tools are in write/├── tests/                     # Tests├── scripts/│   └── api_parity_check.py    # Compares each tool with the Malcolm API├── docs/│   ├── install.md             #   Install, register, other install routes│   ├── container.md           #   Run in a container│   ├── configuration.md       #   Connection settings, every variable│   ├── troubleshooting.md     #   The first call fails│   ├── tools.md               #   Read tools, write tools, trimming│   ├── security.md            #   Security model, audit│   ├── usage.md               #   Demo, filter syntax, examples│   ├── python.md              #   Use the client from Python│   ├── design.md              #   Why an MCP layer, protocol notes│   ├── verification.md        #   Parity check, tested platforms, API endpoints│   └── zh-TW/                 #   Copy of these pages for README.zh-TW.md├── Dockerfile                 # Container image├── server.json                # MCP Registry manifest├── SECURITY.md                # Report a vulnerability├── CONTRIBUTING.md            # How to contribute└── CHANGELOG.md               # Changes per version

Development

bash
pip install -e . pytest pytest-asyncio ruffruff check src testsruff format --check src testspytest

The tests do not need a Malcolm instance. See CONTRIBUTING.md.

License

MIT

Source: README.md at commit 053e637

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

3
  1. v1.2.1LatestOct 13, 2026
  2. v1.2.0Oct 2, 2026
  3. v0.4.0Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts