WYRE-AI/msp-claude-plugins/msp-claude-plugins/sentinelone/sentinelone/skills/api-patterns/SKILL.md
SentinelOne API Patterns
The SentinelOne Purple MCP server and the APIs behind it: uvx installation and transport modes, Service User token levels, the 23 read-only tools organized by domain, and the dual GraphQL (cursor pagination) / REST (offset pagination) architecture with its differing filter syntaxes, rate limits, and error causes.
- Source repository stars
- 42
- Declared platforms
- 1
- Static risk flags
- 2
- Last source update
- 2026-08-28
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
The SentinelOne Purple MCP server and the APIs behind it: uvx installation and transport modes, Service User token levels, the 23 read-only tools organized by domain, and the dual GraphQL (cursor pagination) / REST (offset pagination) architecture with its differing filter syntaxes, rate limits, and error causes.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Declared | Source record | Install path and trigger |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/sentinelone/sentinelone/skills/api-patterns"Inspect the Agent Skill "SentinelOne API Patterns" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/sentinelone/sentinelone/skills/api-patterns/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Anti-triggers
"SentinelOne endpoint" meaning a machine. This skill's endpoint
"SentinelOne endpoint" meaning a machine. This skill's endpointWriting or running an actual query. This skill covers filter and- "SentinelOne endpoint" meaning a machine. This skill's endpoint is an HTTP route; a workstation, server, or agent is sentinelone-inventory. - Writing or running an actual query. This skill covers filter and pagination… - 02
Connection & Authentication
Authentication requires a Service User token from the SentinelOne Management Console:
Navigate to Policy & Settings User Management Service UsersCreate a Service User with appropriate Account or Site scopeGenerate an API token - 03
Service User Token
Authentication requires a Service User token from the SentinelOne Management Console:
Navigate to Policy & Settings User Management Service UsersCreate a Service User with appropriate Account or Site scopeGenerate an API token - 04
Transport Modes
The Purple MCP server supports three transport modes:
The Purple MCP server supports three transport modes: - 05
Claude Desktop Configuration
Review the “Claude Desktop Configuration” section in the pinned source before continuing.
Review and apply the “Claude Desktop Configuration” source section.
Permission review
Static risk signals and limitations
Network access
The documentation includes network, browsing, or remote request actions.
export SENTINELONE_BASE_URL="https://your-console.sentinelone.net"Network access
The documentation includes network, browsing, or remote request actions.
"--from", "git+https://github.com/Sentinel-One/purple-mcp.git",Runs scripts
The documentation asks the agent to run terminal commands or scripts.
uvx --versionRuns scripts
The documentation asks the agent to run terminal commands or scripts.
uvx --from git+https://github.com/Sentinel-One/purple-mcp.git purple-mcp --helpEvidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 94/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 42 | Source | Repository attention, not individual Skill quality |
| Compatibility | 1 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- WYRE-AI/msp-claude-plugins
- Skill path
- msp-claude-plugins/sentinelone/sentinelone/skills/api-patterns/SKILL.md
- Commit
- 5005f73ba2f52cd299f58aa6bb79f4e70ae87103
- License
- Apache-2.0
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
SentinelOne Purple MCP Tools & API Patterns
Overview
SentinelOne provides the Purple MCP server for AI tool integration with the Singularity XDR platform. The MCP server is a Python package installed via uvx from GitHub. It exposes 23 tools covering Purple AI, alerts, vulnerabilities, misconfigurations, asset inventory, and PowerQuery threat hunting. All tools are read-only -- they support investigation and reporting but cannot modify, remediate, or take action on any resources.
The Purple MCP server has a dual API architecture:
- GraphQL API - Used for Purple AI, alerts, vulnerabilities, and misconfigurations
- REST API - Used for asset inventory
Anti-triggers
- "SentinelOne endpoint" meaning a machine. This skill's
endpointis an HTTP route; a workstation, server, or agent issentinelone-inventory. - Writing or running an actual query. This skill covers filter and
pagination mechanics only — PowerQuery execution is
sentinelone-threat-hunting, and natural-language investigation issentinelone-purple-ai.
Connection & Authentication
Service User Token
Authentication requires a Service User token from the SentinelOne Management Console:
- Navigate to Policy & Settings > User Management > Service Users
- Create a Service User with appropriate Account or Site scope
- Generate an API token
CRITICAL: The token must be Account or Site level. Global-level tokens are rejected by the Purple MCP server and will return authentication errors.
Environment Variables:
| Variable | Description |
|---|---|
PURPLEMCP_CONSOLE_TOKEN / SENTINELONE_TOKEN | Service User API token |
PURPLEMCP_CONSOLE_BASE_URL / SENTINELONE_BASE_URL | Console URL (e.g., https://your-console.sentinelone.net) |
export SENTINELONE_TOKEN="your-service-user-token"
export SENTINELONE_BASE_URL="https://your-console.sentinelone.net"
Transport Modes
The Purple MCP server supports three transport modes:
| Mode | Flag | Description | Use Case |
|---|---|---|---|
| stdio | --mode stdio | Standard input/output | Claude Desktop, local usage (recommended) |
| SSE | --mode sse | Server-Sent Events over HTTP | Remote/shared access |
| Streamable HTTP | --mode streamable-http | HTTP with streaming | Production deployments |
Claude Desktop Configuration
{
"mcpServers": {
"sentinelone": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/Sentinel-One/purple-mcp.git",
"purple-mcp",
"--mode", "stdio"
],
"env": {
"PURPLEMCP_CONSOLE_TOKEN": "YOUR_SERVICE_USER_TOKEN",
"PURPLEMCP_CONSOLE_BASE_URL": "https://your-console.sentinelone.net"
}
}
}
}
Installation Requirements
The Purple MCP server requires Python and uv/uvx:
Install uv (Python package manager) following the official
instructions at https://docs.astral.sh/uv/getting-started/installation/
(e.g. pip install uv, or your OS package manager).
# Verify installation
uvx --version
# Test the MCP server
uvx --from git+https://github.com/Sentinel-One/purple-mcp.git purple-mcp --help
Note: This is a Python package, not Node.js. Use
uvx, notnpx.
Complete MCP Tool Reference
Purple AI Tools
| Tool | Description | Parameters |
|---|---|---|
purple_ai | Natural language cybersecurity assistant for threat investigation and PowerQuery generation | query (required) - natural language question or investigation prompt |
Alert Tools (GraphQL)
| Tool | Description | Parameters |
|---|---|---|
get_alert | Get a single alert by ID | alertId (required) |
list_alerts | List alerts with filters | severity, status, viewType, limit, cursor, sortBy, sortOrder |
search_alerts | Search alerts with GraphQL filters | filters (fieldId/filterType/values), limit, cursor |
get_alert_notes | Get notes/comments on an alert | alertId (required) |
get_alert_history | Get timeline of changes for an alert | alertId (required) |
Vulnerability Tools (GraphQL)
| Tool | Description | Parameters |
|---|---|---|
get_vulnerability | Get a single vulnerability by ID | vulnerabilityId (required) |
list_vulnerabilities | List vulnerabilities with filters | severity, status, limit, cursor, sortBy, sortOrder |
search_vulnerabilities | Search vulnerabilities with GraphQL filters | filters (fieldId/filterType/values), limit, cursor |
get_vulnerability_notes | Get notes on a vulnerability | vulnerabilityId (required) |
get_vulnerability_history | Get timeline of changes for a vulnerability | vulnerabilityId (required) |
Misconfiguration Tools (GraphQL)
| Tool | Description | Parameters |
|---|---|---|
get_misconfiguration | Get a single misconfiguration by ID | misconfigurationId (required) |
list_misconfigurations | List misconfigurations with filters | severity, status, viewType, limit, cursor, sortBy, sortOrder |
search_misconfigurations | Search misconfigurations with GraphQL filters | filters (fieldId/filterType/values), limit, cursor |
get_misconfiguration_notes | Get notes on a misconfiguration | misconfigurationId (required) |
get_misconfiguration_history | Get timeline of changes for a misconfiguration | misconfigurationId (required) |
Inventory Tools (REST)
| Tool | Description | Parameters |
|---|---|---|
get_inventory_item | Get a single inventory item by ID | itemId (required) |
list_inventory_items | List inventory items with filters | surface, limit, offset, sortBy, sortOrder |
search_inventory_items | Search inventory with REST filters | filters, surface, limit, offset |
PowerQuery / Data Lake Tools
| Tool | Description | Parameters |
|---|---|---|
powerquery | Execute a PowerQuery against the Singularity Data Lake | query (required), fromDate, toDate |
get_timestamp_range | Get the available time range for PowerQuery data | None |
iso_to_unix_timestamp | Convert an ISO 8601 timestamp to Unix epoch milliseconds | timestamp (required) |
Dual API Architecture
GraphQL API (Alerts, Vulnerabilities, Misconfigurations, Purple AI)
The GraphQL API uses a filter-based query model:
Filter Structure:
{
"fieldId": "severity",
"filterType": "EQUALS",
"values": ["CRITICAL"]
}
Filter Types:
| Filter Type | Description | Example |
|---|---|---|
EQUALS | Exact match | {"fieldId": "severity", "filterType": "EQUALS", "values": ["CRITICAL"]} |
CONTAINS | Substring match | {"fieldId": "name", "filterType": "CONTAINS", "values": ["ransomware"]} |
IN | Match any in list | {"fieldId": "status", "filterType": "IN", "values": ["NEW", "IN_PROGRESS"]} |
NOT_EQUALS | Negation | {"fieldId": "status", "filterType": "NOT_EQUALS", "values": ["RESOLVED"]} |
Pagination: Cursor-based. Use the cursor value from the response to fetch the next page.
Sorting:
| Parameter | Values |
|---|---|
sortBy | Varies by resource (e.g., severity, detectedAt, status) |
sortOrder | ASC, DESC |
REST API (Inventory)
The REST API uses offset-based pagination with filter parameters:
Filter Types:
| Type | Description | Example |
|---|---|---|
| Exact match | Direct value comparison | surface=ENDPOINT |
| Contains | Substring matching | name__contains=server |
| Range | Numeric/date ranges | lastSeen__gte=2026-01-01 |
| ID list | Match multiple IDs | ids=id1,id2,id3 |
| Negation | Exclude matches | status__ne=INACTIVE |
Pagination:
| Parameter | Description | Default |
|---|---|---|
limit | Results per page | 50 |
offset | Skip N results | 0 |
PowerQuery Language
IMPORTANT: PowerQuery is SentinelOne's Scalyr-based pipeline query language. It is NOT Splunk SPL, SQL, KQL, or Elasticsearch Query DSL.
PowerQuery uses a pipeline syntax with filters and aggregations:
EventType = "Process Creation" AND TgtProcName = "powershell.exe"
| columns SrcProcName, TgtProcName, TgtProcCmdLine, EndpointName
| limit 100
Best practice: Use the purple_ai tool with a natural language description of what you want to find, and it will generate the correct PowerQuery syntax. Then execute the generated query with the powerquery tool.
Rate Limiting
SentinelOne enforces rate limits on API calls. The Purple MCP server does not expose specific rate limit headers, but:
- Space out requests when iterating over large datasets
- Use pagination to limit result sizes
- If you receive rate limit errors, wait 30-60 seconds before retrying
- Filter server-side to reduce total API calls
Error Handling
Common Errors
| Error | Cause | Resolution |
|---|---|---|
| 401 Unauthorized | Invalid or expired token | Regenerate Service User token |
| 403 Forbidden | Global-level token used | Use Account or Site-level token instead |
| Tool not found | MCP server not connected | Verify uvx installation and environment variables |
| Invalid query | Malformed PowerQuery syntax | Use purple_ai to generate correct syntax |
| Resource not found | Invalid ID | Verify the resource ID exists |
| Timeout | Query too broad or Data Lake overloaded | Narrow time range or add filters |
Troubleshooting MCP Connection
- Verify uvx - Ensure
uvx --versionreturns a version - Check Python - Ensure
python3 --versionis available - Test manually - Run
uvx --from git+https://github.com/Sentinel-One/purple-mcp.git purple-mcp --help - Verify token - Ensure the token is Account or Site level, not Global
- Check console URL - Must include
https://and the full domain - Test with a simple call - Try
list_alertswithlimit=1to verify connectivity
Best Practices
- Use Account/Site tokens - Never use Global-level tokens; they will be rejected
- Start with Purple AI - Use
purple_aifor investigation before diving into specific tools - Use cursor pagination - For GraphQL tools, use the cursor from each response to fetch subsequent pages
- Scope to clients - When reviewing a specific client's security, filter by site or account
- Time-bound queries - Always set time ranges for PowerQuery to avoid scanning the entire Data Lake
- Cache inventory data - Endpoint and asset data changes less frequently than alerts
- Triage by severity - Always start with CRITICAL and HIGH severity items
- Document findings - Use alert notes and history to build investigation timelines
Related Skills
- Purple AI - Natural language threat investigation
- Alerts - Unified alert management
- Vulnerabilities - Vulnerability tracking and remediation
- Misconfigurations - Cloud security posture management
- Inventory - Asset inventory
- Threat Hunting - PowerQuery and Data Lake queries
Frequently asked questions
What to verify before installation and use
What does the SentinelOne API Patterns source document cover?
The SentinelOne Purple MCP server and the APIs behind it: uvx installation and transport modes, Service User token levels, the 23 read-only tools organized by domain, and the dual GraphQL (cursor pagination) / REST (offset pagination) architecture with its differing filter syntaxes, rate limits, and error causes.
How do I install SentinelOne API Patterns?
The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/sentinelone/sentinelone/skills/api-patterns". Inspect the command and pinned source before running it.
Which Agent platforms does the source record declare?
The pinned source record declares support for: cursor.
Which permission-related actions were detected?
Static rules flagged network, exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
Compare before choosing
PramodDutta/qaskills
Resume ATS Optimizer
Optimize resumes for Applicant Tracking Systems, check ATS compatibility, and analyze keyword match
brucesongs/kali-claw
insecure-design
Insecure Design (OWASP A06:2025) focuses on security flaws in system architecture and design phases, rather than code implementation-level bugs.
brucesongs/kali-claw
binary-reverse
Binary reverse engineering covers the complete chain from static analysis, dynamic debugging, to vulnerability discovery, exploit development, and malware analysis.
SerendipityOneInc/ZooData-Skills
zoodata
API endpoint reference for the ZooData data platform: the 12 commerce endpoints plus 10 keyword-intelligence endpoints (categories, markets, products, competitors, realtime ASIN, AI review analysis, raw reviews, price band, brand, history, and the keyword detail/trend/extends/search/ market-profile/product-traffic/competitor-keywords/traffic-profile/ traffic-timeline family) — their inputs/outputs, parameter quirks, Quick Start (auth, base URL), how credits are tracked (meta.creditsConsumed), an