ESET PROTECT
MCP server for ESET PROTECT's ESET Connect API - device, EDR, vulnerability, patch, and user data.
التثبيت
أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: .cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).
ghcr.io/wyre-ai/eset-protect-mcp:v1.0.2claude mcp add eset-protect -e 'ESETPROTECT_CLIENT_ID=<ESETPROTECT_CLIENT_ID>' -e 'ESETPROTECT_CLIENT_SECRET=<your esetprotect_client_secret>' -e 'ESETPROTECT_REGION=us' -e 'MCP_TRANSPORT=stdio' -e 'AUTH_MODE=env' -e 'LOG_LEVEL=info' -- docker run -i --rm ghcr.io/wyre-ai/eset-protect-mcp:v1.0.2
{
"mcpServers": {
"eset-protect": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/eset-protect-mcp:v1.0.2"
],
"env": {
"ESETPROTECT_CLIENT_ID": "<ESETPROTECT_CLIENT_ID>",
"ESETPROTECT_CLIENT_SECRET": "<your esetprotect_client_secret>",
"ESETPROTECT_REGION": "us",
"MCP_TRANSPORT": "stdio",
"AUTH_MODE": "env",
"LOG_LEVEL": "info"
}
}
}
}
متغيرات البيئة
ESETPROTECT_CLIENT_IDإلزامي Email of the dedicated ESET Connect API user, created in ESET Business Account with the Integrations toggle enabled.ESETPROTECT_CLIENT_SECRETإلزامي سري Password of the ESET Connect API user paired with ESETPROTECT_CLIENT_ID.ESETPROTECT_REGIONESET Connect region: us (default), eu, de, jpn, or ca.MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.AUTH_MODECredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.LOG_LEVELLog verbosity: debug, info, warn, error
التوثيق
مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.
المحتويات
ESET PROTECT MCP Server
MCP server for ESET PROTECT's ESET Connect API gateway - endpoint fleet visibility (devices and groups), detection/EDR investigation, vulnerability data, patch status, and user management - for AI assistants and the WYRE Conduit gateway.
Authentication
Create a dedicated API user in ESET Business Account: User Management > create a user with read-only permission > enable the Integrations toggle. This gives you an email/password pair for that user.
ESET Connect's token endpoint (POST /oauth/token) is documented in its own OpenAPI spec as a password grant - username/password fields, not client_id/client_secret with grant_type=client_credentials. This server accepts clientId/clientSecret (matching the credential shape used across WYRE's other MCP connectors) and sends them as username/password in that grant. It handles the resulting bearer token's caching and refresh (via the returned refresh_token, falling back to a full re-login if the refresh token itself is rejected) internally - callers only ever supply the long-lived email/password pair.
Configuration
| Env var | Description | |||
|---|---|---|---|---|
ESETPROTECT_CLIENT_ID | Email of the dedicated ESET Connect API user. | |||
ESETPROTECT_CLIENT_SECRET | Password of that API user. | |||
ESETPROTECT_REGION | us (default), eu, de, jpn, or ca - the ESET Connect region your ESET Business Account was provisioned in. | |||
MCP_TRANSPORT | stdio (default) or http. | |||
AUTH_MODE | env (default, reads the vars above) or gateway (credentials arrive per-request via X-EsetProtect-* headers, injected by the Conduit gateway). | |||
CONDUIT_S2S_SECRET | When set, the HTTP transport requires a valid X-Gateway-S2S header (Conduit sidecar auth) on every /mcp request. | |||
LOG_LEVEL | debug \ | info (default) \ | warn \ | error. |
Each ESET Connect API domain (device, incident, vulnerability, patch, and user management) is hosted on its own per-region subdomain, e.g. https://us.device-management.eset.systems; the auth host follows the same regional pattern, e.g. https://us.business-account.iam.eset.systems. ESETPROTECT_REGION selects the prefix for all of them.
Tools
Device Management
esetprotect_list_device_groups- list device groups.esetprotect_list_group_devices- list the devices in a group.esetprotect_list_devices- list managed devices, filterable by display name, functionality status, or mute state.esetprotect_get_device- get a device by UUID.esetprotect_batch_get_devices- get multiple devices by UUID in one call.
Incident Management (detections, detection groups, EDR)
esetprotect_list_detections/esetprotect_get_detection- v1 detections (legacy surface).esetprotect_list_detections_v2/esetprotect_get_detection_v2/esetprotect_batch_get_detections- v2 detections (endpoint, cloud office, and EDR).esetprotect_list_detection_groups/esetprotect_get_detection_group- detections clustered into groups.esetprotect_list_edr_rules/esetprotect_get_edr_rule- EDR detection rules.esetprotect_list_edr_rule_exclusions/esetprotect_get_edr_rule_exclusion- EDR rule exclusions.
Vulnerability Management
esetprotect_list_device_os_vulnerabilities- OS vulnerabilities found on devices.esetprotect_list_device_vulnerabilities- vulnerabilities found on devices (application/OS/package scope).esetprotect_list_recent_scans- recent vulnerability scan details.esetprotect_list_vulnerable_devices- devices with known vulnerabilities.
Patch Management
esetprotect_list_recent_application_patching_details- most recent application-patching processes fleet-wide.esetprotect_list_device_patches- patches for devices, filterable by patch type.esetprotect_list_patching_process_details- detailed patching-process history within a time window.
User Management
esetprotect_list_users- list users, filterable by email, display name, protection status, and more.esetprotect_get_user- get a user by UUID.esetprotect_batch_get_users- get multiple users by UUID in one call (atomic - all or none).
Request limits
- HTTP request bodies are capped at 256 KiB (262144 bytes). After the
X-Gateway-S2Scheck passes, aContent-Lengthabove the cap returns 413 with a JSON-RPC error; bodies withoutContent-Lengthare capped by the MCP SDK transport. Unauthenticated requests still get 401 first. tools/callarguments are capped at 10,000 elements (every array item and object key at any depth). Larger inputs return anisErrortool result and are never dispatched.
These limits address CVE-2026-111768 / GHSA-46jr-4wx8-v453 (memory exhaustion during validation) and GHSA-f897-62hf-6gxq (no request body / batch cap).
Scope
This is a v1, read-only fleet/security-visibility surface. Explicitly deferred: device move/rename and batch import, detection and detection-group resolve, EDR rule and rule-exclusion create/update/delete, and any asset-management group create/delete/move/rename endpoints. These are mutation/provisioning actions out of scope for a read-only monitoring connector and can be added as a follow-up.
The incident-management API also exposes a separate /v2/incidents case-management surface (list/get/close/reopen, comments) alongside detections and detection-groups; it is not covered by this v1 surface either, for the same reason.
Development
npm install
npm run build
npm test
npm run lint # tsc --noEmit
Docker
docker build -t eset-protect-mcp .
docker run -p 8080:8080 \
-e ESETPROTECT_CLIENT_ID=... \
-e ESETPROTECT_CLIENT_SECRET=... \
eset-protect-mcp
الأسئلة الشائعة
ما هو ESET PROTECT؟
MCP server for ESET PROTECT's ESET Connect API - device, EDR, vulnerability, patch, and user data.
كيف أثبّت ESET PROTECT؟
يعمل على جهازك. في Claude Code: claude mcp add eset-protect -e 'ESETPROTECT_CLIENT_ID=<ESETPROTECT_CLIENT_ID>' -e 'ESETPROTECT_CLIENT_SECRET=<your esetprotect_client_secret>' -e 'ESETPROTECT_REGION=us' -e 'MCP_TRANSPORT=stdio' -e 'AUTH_MODE=env' -e 'LOG_LEVEL=info' -- docker run -i --rm ghcr.io/wyre-ai/eset-protect-mcp:v1.0.2. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.
هل يحتاج ESET PROTECT إلى مفتاح API؟
نعم. يتطلب ESETPROTECT_CLIENT_ID, ESETPROTECT_CLIENT_SECRET، وتضبطها في إعداداته.
هل ESET PROTECT مفتوح المصدر؟
شيفرته علنية على GitHub، لكن المستودع لا يعلن ترخيصًا قياسيًا.
من يصون ESET PROTECT؟
ينشره WYRE-AI. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.
من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.