Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

eset-protect-mcp

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eset-protect-mcp

Model Context Protocol (MCP) server for ESET PROTECT (On-Prem & Cloud) — manage devices, policies, detections, incidents, quarantine, and more via ESET REST API and ESET Connect

latest
Source
npmnpm
Version
1.4.8
Version published
Maintainers
1
Created
Source

ESET PROTECT MCP Server

npm version npm downloads License: MIT

A Model Context Protocol (MCP) server for ESET PROTECT — supports both On-Prem and Cloud (ESET Connect).

Manage devices, policies, detections, incidents, quarantine, executables, installers, EDR rules, automation tasks, and more through natural language with GitHub Copilot, Claude Desktop, or any MCP client.

npx -y eset-protect-mcp

Features

Shared Tools (On-Prem + Cloud) — 18 tools

CategoryTools
Deviceslist_devices, get_device, batch_get_devices, move_device, rename_device
Device Groupslist_device_groups, list_devices_in_group
Policieslist_policies, get_policy, create_policy, build_endpoint_policy_clone_with_mutation, create_endpoint_policy_clone_with_mutation, delete_policy
Policy Assignmentslist_policy_assignments, get_policy_assignment, assign_policy, unassign_policy, update_policy_assignment_ranking

Cloud-Only Tools (ESET Connect) — 78 additional tools

CategoryTools
Devices (extra)batch_import_devices
Asset Managementcreate_group, delete_group, move_group, rename_group
Automationlist_device_tasks, create_device_task, get_device_task, delete_device_task, list_device_task_runs, update_device_task_targets, update_device_task_triggers
Identitylist_permissions, list_role_assignments, assign_role, revoke_role, create_role, delete_role
Detectionslist_detections, list_detections_v2, get_detection, resolve_detection, batch_get_detections
Detection Groupslist_detection_groups, get_detection_group, resolve_detection_group, search_detection_groups
EDR Ruleslist_edr_rules, create_edr_rule, get_edr_rule, delete_edr_rule, enable_edr_rule, disable_edr_rule, update_edr_rule_definition
EDR Rule Exclusionslist_edr_rule_exclusions, create_edr_rule_exclusion, get_edr_rule_exclusion, delete_edr_rule_exclusion, update_edr_rule_exclusion_definition
Incidentslist_incidents, get_incident, close_incident, reopen_incident, update_incident_attributes
Incident Commentslist_incident_comments, create_incident_comment, get_incident_comment, delete_incident_comment, update_incident_comment_text
Executableslist_executables, search_executables, get_executable, block_executable, unblock_executable
Quarantinelist_quarantined_objects, get_quarantined_object, get_quarantine_count, batch_delete_quarantined_objects, batch_download_quarantined_objects, batch_restore_quarantined_objects, download_quarantined_object, purge_quarantined_objects, restore_quarantined_object
Installerslist_installers, get_installer, create_installer, delete_installer, generate_gpo_sccm_file
Mobile Devicesbatch_activate_mobile_product, batch_get_enrollment_links
Network Accesslist_ip_sets, get_ip_set, update_ip_set
Userslist_users, get_user, batch_get_users
Web Accesslist_web_address_rules, update_web_address_rule_domains

Incident filters use unquoted enum constants. For example, use status==INCIDENT_STATUS_OPEN, not status=="INCIDENT_STATUS_OPEN".

Use search_executables with hashSha1 or displayName to resolve the executableUuid required by block_executable. ESET exposes executable listing with pagination only, so the MCP server scans pages client-side.

For automation troubleshooting, create_device_task adds a specific hint when Run Command task creation returns an empty-body HTTP 500. Use list_device_task_runs with includeFailureSummary=true to append _mcpFailureSummary from status, error, reason, and exit-code fields.

For create_incident_comment, pass {"text":"..."}. The MCP server wraps it into ESET's required {"comment":{"incidentUuid":"...","text":"..."}} request body.

Policy and assignment inventory tools support pagination with pageSize and pageToken: list_device_groups, list_policies, list_policy_assignments, and list_ip_sets. Use get_policy with decodePolicyData=true to recursively decode base64 PolicyData blobs into _mcpDecodedPolicyData for troubleshooting product settings such as firewall/network protection. If decoded policy data contains an ar archive after the first JSON object, *.lzma members such as endpoint.lzma are decompressed and exposed under archiveMembers[].decoded. list_ip_sets is limited by ESET to Common features policies; unsupported policies may return HTTP 400, while HTTP 500 with an empty body should be treated as an upstream ESET failure for the policy or tenant.

For large endpoint policies, combine get_policy options to keep output focused: omitRawPolicyData=true removes raw base64 blobs, decodedSearch="firewall" returns decoded matches, and decodedPath="archiveMembers[0].decoded.parsed.Settings" extracts a specific decoded path. When decodedPath or decodedSearch is used, full decoded policy data is omitted by default; set includeFullDecodedPolicyData=true to include it.

ESET Connect exposes only limited dedicated network/web policy mutation APIs: Network Access Protection supports list_ip_sets, get_ip_set, and update_ip_set; Web Access Protection supports list_web_address_rules and update_web_address_rule_domains. Other firewall rule create/update/delete work must be handled through policy data updates rather than a dedicated firewall-rule CRUD endpoint.

ESET Connect does not expose an update endpoint for existing policies. To change endpoint firewall settings safely, use build_endpoint_policy_clone_with_mutation to generate a create_policy payload, or create_endpoint_policy_clone_with_mutation to create a cloned policy with a decoded endpoint.lzma JSON mutation. The source policy is not modified. Typical firewall rule insertion path: policy.data.Settings.Firewall.Rules.ce_value.

Prerequisites

  • Node.js >= 18.0.0
  • On-Prem: ESET PROTECT On-Prem 13.0+ with REST API enabled
  • Cloud: ESET Business Account / ESET PROTECT Hub with API user (Integrations enabled)

Installation

From npm

npm install -g eset-protect-mcp

From GitHub

git clone https://github.com/Fenrindale/eset-protect-mcp.git
cd eset-protect-mcp
npm install
npm run build

Configuration

Environment Variables

VariableRequiredDescription
ESET_MODENoonprem (default) or cloud
ESET_USERNAMEYesAPI username / email
ESET_PASSWORDYesAPI password
ESET_SERVER_URLOn-Prem onlyServer URL (e.g., https://protect-server:9443)
ESET_VERIFY_SSLOn-Prem onlyfalse to allow self-signed certs (default: true)
ESET_REGIONCloud onlyeu, de, us, jpn, or ca
ESET_REQUEST_TIMEOUT_MSNoHTTP request timeout in milliseconds (default: 120000)
ESET_EXECUTABLE_SEARCH_MAX_PAGESNoMax pages scanned by search_executables (default: 20)
ESET_EXECUTION_MODENolive (default), read-only, dry-run, or scoped
ESET_ALLOWED_TOOLSNoComma-separated tool allowlist
ESET_DENIED_TOOLSNoComma-separated tool blocklist
ESET_REQUIRE_APPROVALNonone, all, risk levels (low_write, high_write, destructive), or tool names
ESET_APPROVALS_DIRNoApproval record directory (default: .eset-mcp/approvals)
ESET_APPROVAL_TOKENNoToken required by the local approve_action tool
ESET_APPROVAL_TTL_SECONDSNoApproval validity window (default: 900)
ESET_AUDIT_LOGNoJSONL audit log path for tool decisions and executions
ESET_ALLOWED_DEVICE_UUIDSNoComma-separated device UUID allowlist for scoped mode
ESET_ALLOWED_GROUP_UUIDSNoComma-separated group UUID allowlist for scoped mode
ESET_ALLOWED_RULE_UUIDSNoComma-separated EDR rule UUID allowlist for scoped mode
ESET_ALLOW_GLOBAL_SCOPENotrue to allow global EDR exclusions in scoped mode

Approval and Sandbox Controls

The server includes a local policy gate before any ESET API call. The default live mode preserves existing behavior.

ModeBehavior
liveExecute tools normally, unless allow/deny/approval variables are configured
read-onlyAllow only list_*, get_*, batch_get_*, and search_* tools
dry-runReturn a sanitized action summary for write tools without calling ESET
scopedEnforce configured UUID allowlists and require approval for high_write and destructive tools by default

Write tools are classified as low_write, high_write, or destructive. When approval is required, the first tool call returns approvalRequired, writes a pending approval record, and does not call ESET. A human can then approve it with the local approve_action tool or by writing a matching JSON approval file under ESET_APPROVALS_DIR. Approved actions are one-shot and are consumed after execution.

Two local security tools are always registered:

ToolPurpose
list_pending_approvalsShow pending approval records from the local approval store
approve_actionApprove or deny one pending action when ESET_APPROVAL_TOKEN is configured

Example guarded configuration:

ESET_EXECUTION_MODE=scoped
ESET_REQUIRE_APPROVAL=high_write,destructive
ESET_ALLOWED_RULE_UUIDS=rule-uuid-1,rule-uuid-2
ESET_ALLOWED_GROUP_UUIDS=group-uuid-1
ESET_AUDIT_LOG=/var/log/eset-mcp-audit.jsonl

Usage with MCP Clients

VS Code / GitHub Copilot — On-Prem

{
  "mcp": {
    "servers": {
      "eset-protect": {
        "command": "npx",
        "args": ["-y", "eset-protect-mcp"],
        "env": {
          "ESET_MODE": "onprem",
          "ESET_SERVER_URL": "https://your-protect-server:9443",
          "ESET_USERNAME": "your-api-user",
          "ESET_PASSWORD": "your-api-password",
          "ESET_VERIFY_SSL": "false"
        }
      }
    }
  }
}

VS Code / GitHub Copilot — Cloud

{
  "mcp": {
    "servers": {
      "eset-protect": {
        "command": "npx",
        "args": ["-y", "eset-protect-mcp"],
        "env": {
          "ESET_MODE": "cloud",
          "ESET_REGION": "eu",
          "ESET_USERNAME": "your-api-user@company.com",
          "ESET_PASSWORD": "your-api-password"
        }
      }
    }
  }
}

Claude Desktop — On-Prem

{
  "mcpServers": {
    "eset-protect": {
      "command": "npx",
      "args": ["-y", "eset-protect-mcp"],
      "env": {
        "ESET_MODE": "onprem",
        "ESET_SERVER_URL": "https://your-protect-server:9443",
        "ESET_USERNAME": "your-api-user",
        "ESET_PASSWORD": "your-api-password",
        "ESET_VERIFY_SSL": "false"
      }
    }
  }
}

Claude Desktop — Cloud

{
  "mcpServers": {
    "eset-protect": {
      "command": "npx",
      "args": ["-y", "eset-protect-mcp"],
      "env": {
        "ESET_MODE": "cloud",
        "ESET_REGION": "us",
        "ESET_USERNAME": "your-api-user@company.com",
        "ESET_PASSWORD": "your-api-password"
      }
    }
  }
}

ESET PROTECT API Setup

On-Prem

  • Enable the REST API in More > Settings on your ESET PROTECT Web Console
  • Open API ports in your firewall (default: 9443)
  • Create an API user with appropriate permission sets

Note: The Administrator account cannot use the API.

Docs: ESET PROTECT On-Prem REST API

Cloud (ESET Connect)

  • Log in to ESET Business Account / ESET PROTECT Hub as Superuser
  • Create an API user with Integrations enabled under Access Rights
  • The user must complete account setup via invitation email
  • Use the correct region (eu, de, us, jpn, ca) matching your ESET PROTECT server location

Docs: ESET Connect

Cloud Regions & Domains

RegionAuth Domain
EUeu.business-account.iam.eset.systems
Germanyde.business-account.iam.eset.systems
USAus.business-account.iam.eset.systems
Japanjpn.business-account.iam.eset.systems
Canadaca.business-account.iam.eset.systems

Development

git clone https://github.com/Fenrindale/eset-protect-mcp.git
cd eset-protect-mcp
npm install
npm run build
npm start

Release

CI runs on pushes and pull requests to master.

To publish from GitHub Actions, configure npm Trusted Publishing for this package:

FieldValue
PublisherGitHub Actions
Organization or userFenrindale
Repositoryeset-protect-mcp
Workflow filenamepublish.yml
Allowed actionsnpm publish

Then release by bumping the package version and pushing the matching tag:

npm version patch
git push origin master --follow-tags

License

MIT — see LICENSE for details.

Keywords

mcp

FAQs

Package last updated on 05 Jun 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts