SentinelOne MCP Server
Provides threat intelligence lookups through VirusTotal, including reports by file hash, URL reputation, domain reputation, IP reputation, file relationships, sandbox behavior, and VirusTotal Intelligence search.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SentinelOne MCP Serverask Purple AI if we've seen any ransomware activity in the last 24 hours"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SentinelOne MCP Server
An MCP server for SentinelOne Singularity. It lets an AI agent ask Purple AI hunting questions, run PowerQueries over the Singularity Data Lake, and read alerts, vulnerabilities, misconfigurations and the asset inventory of one SentinelOne console, plus VirusTotal and public CVE lookups. It is read-only.
The tools come from SentinelOne's own open-source tool library, purple-mcp (MIT), which is installed as a pinned dependency. purple-mcp reads one console's credentials from environment variables when it starts; this server adds what a multi-tenant gateway needs: credentials per request, the standard error envelope, concise tool documentation, and the usual health and isolation guarantees.
Transport: MCP Streamable HTTP at
POST /mcp, health probe atGET /healthStateless and multi-tenant: credentials arrive on every request as HTTP headers and are never stored; every tool is listed from the first
tools/listPython 3.12, uv, FastMCP, purple-mcp
License: Apache-2.0, Copyright 2026 MSPbots.ai (purple-mcp: MIT, see NOTICE)
Authentication headers
Header | Required | Type | Default | Allowed values | Description | Example |
| Yes | string | none | https URL | SentinelOne console URL ( |
|
| Yes | string | none | - | Console API token of a service user ( |
|
| No | string | none | - | VirusTotal API key, needed only by the |
|
Where to get them:
In the SentinelOne console create a service user (Policy & Settings -> User Management -> Service Users) at Account or Site scope with a viewer-level role, and generate its API token. The token must cover a single Account or Site; Global-scope tokens are not supported. Purple AI and the Data Lake need the matching licences on the account.
The console URL is the address you sign in to, e.g.
https://your-console.sentinelone.net; a path after the host name is ignored.A VirusTotal key comes from the VirusTotal profile page;
threat_intel_searchneeds a key with Intelligence access.
How credentials are used: for each request the server builds purple-mcp's settings from these
headers and makes them current only for that request; purple-mcp then calls the console's
GraphQL and REST APIs with the token. A request to /mcp without the URL or token gets HTTP
401 naming the missing header; a URL that is not https gets HTTP 400.
Related MCP server: VAST DB MCP Server
Tools
All tools return a JSON string and are read-only. Lists page with first (1-100) and after
(pageInfo.endCursor of the previous page); the inventory pages with limit / skip.
search_* tools take filters as a JSON string or array (see each tool's parameter
description); datetime filters use epoch milliseconds from iso_to_unix_timestamp.
Tool | Purpose | Parameters (required in bold) |
| Ask Purple AI a hunting question; it answers or returns a PowerQuery | query |
| Run a PowerQuery over the Data Lake for a time window | query, start_datetime, end_datetime |
| Compute a start / end window (e.g. last 24 h) | reference_time, years, months, weeks, days, hours, minutes, seconds, direction |
| Convert an ISO 8601 time to epoch milliseconds | iso_datetime |
| One alert | alert_id |
| Alerts, newest first, by assignment | first, after, view_type, fields |
| Alerts by severity, status, verdict, assignee, name, time | filters, first, after, view_type, fields |
| Analyst notes on an alert | alert_id |
| An alert's audit trail | alert_id, first, after |
| Purple AI's auto-investigation report for an alert | alert_id |
| One misconfiguration | misconfiguration_id |
| Posture misconfigurations by environment | first, after, view_type, fields |
| Misconfigurations by severity, status, asset, policy, compliance | filters, first, after, view_type, fields |
| Notes on a misconfiguration | misconfiguration_id |
| A misconfiguration's audit trail | misconfiguration_id, first, after |
| One vulnerability | vulnerability_id |
| Vulnerabilities, newest first | first, after, fields |
| Vulnerabilities by severity, CVE, exploitation, KEV, software, asset | filters, first, after, fields |
| Notes on a vulnerability | vulnerability_id |
| A vulnerability's audit trail | vulnerability_id, first, after |
| One asset from the unified inventory | item_id, fetch_fields |
| Assets, optionally for one surface | limit, skip, surface, fetch_fields |
| Assets by type, status, OS, name, cloud, last activity | filters, limit, skip, fetch_fields |
| VirusTotal report for a file hash | hash_value |
| VirusTotal reputation for a URL | url |
| VirusTotal reputation for a domain | domain |
| VirusTotal reputation for an IP | ip_address |
| A file's contacted IOCs or related files | hash_value, relationship_type |
| VirusTotal Intelligence search | query |
| VirusTotal sandbox behaviour for a file | hash_value, sandbox |
| One CVE from a public CVE database | cve_id |
| CVEs for a vendor / product | vendor, product |
| Public CVE database freshness | - |
Errors come back as a JSON envelope instead of an exception:
{"error": {"code": "unauthorized", "message": "...401...", "retryable": false}}code is one of not_configured, unauthorized, not_found, invalid_argument,
rate_limited, upstream_error.
Run locally
uv sync
uv run python -m sentinelone_mcp # listens on 0.0.0.0:8080or with Docker:
docker build --platform linux/amd64 -t sentinelone-mcp:dev .
docker run --rm -p 8080:8080 sentinelone-mcp:devConfiguration (environment variables, all optional): MCP_HTTP_HOST (default 0.0.0.0),
MCP_HTTP_PORT (default 8080), LOG_LEVEL (default INFO). Credentials are never read
from the environment.
Testing example
# list tools
curl -s http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-Purplemcp-Base-Url: https://your-console.sentinelone.net" \
-H "X-Purplemcp-Token: your-console-token" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# new critical alerts
curl -s http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-Purplemcp-Base-Url: https://your-console.sentinelone.net" \
-H "X-Purplemcp-Token: your-console-token" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_alerts","arguments":{"filters":[{"fieldId":"severity","filterType":"string_equals","value":"CRITICAL"},{"fieldId":"status","filterType":"string_equals","value":"NEW"}],"first":10}}}'Unit tests (no network access needed):
uv run pytestDelivery notes
Tool count (33). Names and parameters are purple-mcp's, kept as an existing contract.
Built on the vendor's library. API calls, GraphQL queries and parsing are purple-mcp's, pinned to a reviewed commit in
pyproject.toml; updating it is a one-line change followed by the snapshot tests.Per-request credentials. purple-mcp looks its settings up through one function; this server points that function at the current request's settings, so concurrent tenants never share a token, and no process-wide credentials exist.
Documentation. Tool descriptions are short; filter syntax, field names and enum values are in each parameter's description.
Threat intelligence needs the optional VirusTotal key; without it those tools say so.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only CVE intelligence, remediation playbooks, and agent setup guides. Not a scanner.
Pay-per-call cybersecurity for AI agents: vuln scans, threat intel, compliance, code security.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Read-only smart-contract security intelligence for autonomous agents.
Related MCP Servers
AlicenseBqualityBmaintenanceEnables MCP clients to interact with SentinelOne's cybersecurity platform for security analysis, threat investigation, and asset management through natural language queries. Provides read-only access to alerts, vulnerabilities, misconfigurations, and inventory data.33101MIT- AlicenseNot gradedqualityDmaintenanceEnables AI agents to securely query VAST Data databases for schema, metadata, and sample data via read-only SQL and MCP resources.MIT
- AlicenseAqualityBmaintenanceProvides read-only visibility into CyberQP privileged access management data, including customer and account metadata, tenant event logs, and Just-In-Time account status and policies, for AI assistants.10Apache 2.0
- AlicenseAqualityCmaintenanceGives AI agents threat-intelligence verdicts for IPs, domains, URLs and hashes, CVE lookups with EPSS and CISA KEV data, and a prompt-injection gate that scans untrusted text before the agent acts on it. Agents can also batch-check up to 100 indicators, hunt brand-lookalike domains, and track scan and request quotas.1249 npmMIT