{
  "$schema": "https://readbeforerun.ai/schema/entry.schema.json",
  "entry": {
    "id": "sentinelone-s1-secops-mcp",
    "name": "SentinelOne MCP Server (s1-secops-mcp)",
    "summary": "Node.js MCP server with 35 tools for the SentinelOne console, data lake, alert management and Hyperautomation, read-only by default.",
    "draft": "review",
    "type": "mcp-server",
    "mission": [
      "defensive"
    ],
    "task": [
      "alert-triage",
      "detection-engineering"
    ],
    "domain": [
      "security-operations"
    ],
    "runtime": [
      "mcp-generic",
      "claude-code"
    ],
    "tier": "listed",
    "last_checked": "2026-10-21",
    "next_check": "2027-01-19",
    "freshness": "fresh",
    "superseded": false,
    "in_my_kit": null,
    "advice": null,
    "code_shows": "writes outside the project · reads broad tokens or the environment · changes config or installs globally · Approval: unknown",
    "source": {
      "repo": "https://github.com/Sentinel-One/ai-siem",
      "subpath": "mcp/s1-secops-mcp",
      "commit": "b84fba9f6e838ee7bda1038f2ea8a4e0c1320b2a",
      "version": "v_1_99_0",
      "license": "AGPL-3.0-only"
    },
    "install": {
      "skills_cli": null,
      "claude_code": null,
      "upstream": "mkdir -p ~/.local/bin && curl -fsSL https://raw.githubusercontent.com/Sentinel-One/ai-siem/main/mcp/docker/s1-secops-mcp-launch.sh -o ~/.local/bin/s1-secops-mcp-launch.sh && sh ~/.local/bin/s1-secops-mcp-launch.sh install",
      "bundled": false
    },
    "scan": {
      "status": "static scan pending (not run)"
    },
    "reach": {
      "method": "reach-v0.1",
      "level": 2,
      "level_source": "static",
      "level_label": "open",
      "unknown_axes": 1,
      "verdict": "not-run",
      "badge": "reach ≥2 · not run yet",
      "long": "reach ≥2 from code (open, 1 right unknown); lab: not run yet",
      "declared": {
        "fs": 2,
        "net": 1,
        "exec": 1,
        "cred": 2,
        "persist": 3,
        "hitl": 0
      },
      "static": {
        "level": 2,
        "fs": 2,
        "net": 1,
        "exec": 1,
        "cred": 2,
        "persist": 2,
        "hitl": null,
        "unknown": [
          "hitl"
        ]
      },
      "observed": null,
      "surplus": null,
      "fit": null,
      "exports": {
        "aivss": {
          "fs": 0.5,
          "net": 0.5,
          "exec": 0.5,
          "cred": 0.5,
          "persist": 0.5,
          "hitl": null
        },
        "usf_risk_tier": "L2"
      }
    },
    "profile": {
      "read_at": "b84fba9f6e838ee7bda1038f2ea8a4e0c1320b2a",
      "read_on": "2026-10-25",
      "overview": "A Node.js MCP server that gives an AI client tools for a SentinelOne tenant's Management Console, Singularity Data Lake, UAM Alert Interface and Hyperautomation APIs over stdio.",
      "purpose": [
        "Provides PowerQuery, Management Console API, Unified Alert Management, Singularity Data Lake and Hyperautomation tools for one SentinelOne tenant.",
        "Combines SentinelOne API access with SOC analyst context that it serves to the AI client.",
        "Ships in the ai-siem repository, which the author describes as a community-driven project for SentinelOne's AI SIEM, maintained by SentinelOne but not a formal product."
      ],
      "use_cases": [
        {
          "text": "Triage UAM alerts by status, analyst verdict, assignee and notes; these changes are refused until read-only mode is turned off.",
          "task": "alert-triage"
        },
        {
          "text": "Run PowerQuery hunts and test STAR rule logic against Singularity Data Lake telemetry.",
          "task": "detection-engineering"
        },
        {
          "text": "Export full-event forensic timelines with the LOG raw-event search mode of powerquery_run.",
          "task": "dfir"
        },
        {
          "text": "Download RemoteOps-fetched files, threat files and CSV or ZIP exports from the console to a local file.",
          "task": "dfir"
        }
      ],
      "maturity": null,
      "capabilities": [
        {
          "name": "PowerQuery",
          "effects": [
            "reads"
          ],
          "enabled": "default"
        },
        {
          "name": "Mgmt Console",
          "effects": [
            "reads"
          ],
          "enabled": "default"
        },
        {
          "name": "SDL API",
          "effects": [
            "reads"
          ],
          "enabled": "default"
        },
        {
          "name": "Hyperautomation",
          "effects": [
            "reads"
          ],
          "enabled": "default"
        },
        {
          "name": "Write tools (S1_READ_ONLY=false)",
          "effects": [
            "changes",
            "deletes"
          ],
          "enabled": "optional"
        },
        {
          "name": "UAM Ingest",
          "effects": [
            "changes"
          ],
          "enabled": "optional"
        },
        {
          "name": "CLI (setup / status / forget / exec)",
          "effects": [
            "reads",
            "changes",
            "deletes",
            "runs-commands"
          ],
          "enabled": "default"
        },
        {
          "name": "Resources and prompts",
          "effects": [
            "reads"
          ],
          "enabled": "default"
        }
      ],
      "effects": [
        "reads",
        "changes",
        "deletes",
        "runs-commands"
      ],
      "runs": "container",
      "listens": [],
      "sends_to": [
        {
          "to": "SentinelOne Management Console",
          "kind": "vendor-api",
          "when": "always"
        },
        {
          "to": "Singularity Data Lake (<console>/sdl)",
          "kind": "vendor-api",
          "when": "default"
        },
        {
          "to": "Purple AI (console GraphQL)",
          "kind": "vendor-api",
          "when": "optional"
        },
        {
          "to": "HEC ingest host",
          "kind": "vendor-api",
          "when": "optional"
        },
        {
          "to": "raw.githubusercontent.com",
          "kind": "download",
          "when": "default"
        },
        {
          "to": "sentinelone/secops-mcps image",
          "kind": "download",
          "when": "default"
        }
      ],
      "model": "client",
      "needs": [
        {
          "kind": "credentials",
          "text": "S1_CONSOLE_URL and S1_CONSOLE_API_TOKEN, a Management Console API token of a service user or console user, used by the Mgmt API, UAM, PowerQuery and SDL tools."
        },
        {
          "kind": "credentials",
          "text": "S1_HEC_TOKEN, an SDL Log Write Key minted for one account or site, is needed for hec_ingest only."
        },
        {
          "kind": "authorization",
          "text": "The console token's role is the authoritative control over writes; the server's read-only mode is a guard on top of it."
        },
        {
          "kind": "authorization",
          "text": "ha_import_workflow needs the Hyper Automate.write permission on the token's role."
        },
        {
          "kind": "runtime",
          "text": "Node 24 or later when running from a clone."
        },
        {
          "kind": "container",
          "text": "Docker for the recommended keychain-launcher install."
        },
        {
          "kind": "setting",
          "text": "Write tools need S1_READ_ONLY=false, which install --read-write adds to the Docker launcher entry."
        },
        {
          "kind": "tools",
          "text": "An OS keychain backend: /usr/bin/security on macOS, secret-tool with a D-Bus session on Linux, or @napi-rs/keyring on Windows; otherwise environment variables."
        }
      ]
    },
    "urls": {
      "page": "/catalog/sentinelone-s1-secops-mcp/",
      "json": "/entries/sentinelone-s1-secops-mcp.json",
      "md": "/catalog/sentinelone-s1-secops-mcp.md",
      "badge": "/badge/sentinelone-s1-secops-mcp.svg"
    }
  },
  "data": {
    "schema_version": "0.5",
    "slug": "sentinelone-s1-secops-mcp",
    "name": "SentinelOne MCP Server (s1-secops-mcp)",
    "summary": "Node.js MCP server with 35 tools for the SentinelOne console, data lake, alert management and Hyperautomation, read-only by default.",
    "draft": "review",
    "in_my_kit": null,
    "type": "mcp-server",
    "mission": [
      "defensive"
    ],
    "task": [
      "alert-triage",
      "detection-engineering"
    ],
    "domain": [
      "security-operations"
    ],
    "phase": [
      "def:detect",
      "def:respond"
    ],
    "role": [
      "soc"
    ],
    "runtime": [
      "mcp-generic",
      "claude-code"
    ],
    "auth": "token",
    "autonomy": null,
    "addresses": [],
    "frameworks": {
      "owasp_ast": [],
      "owasp_asi": [],
      "attack_tactic": [],
      "atlas": []
    },
    "source": {
      "repo": "https://github.com/Sentinel-One/ai-siem",
      "subpath": "mcp/s1-secops-mcp",
      "commit": "b84fba9f6e838ee7bda1038f2ea8a4e0c1320b2a",
      "version": "v_1_99_0",
      "license": "AGPL-3.0-only",
      "manifest": "package.json",
      "also_listed": {
        "tenable-cyberagents-exchange": "https://github.com/tenable/cyberagents-exchange/blob/9d0ddf1fe8dc9651a0c461a2a27d33cb8a160a2c/mcp-servers/sentinelone-s1-secops-mcp.md"
      }
    },
    "upstream": {
      "checked_at": "2026-10-21",
      "updated_at": "2026-10-20",
      "current_release": "v_1_99_0",
      "archived": false,
      "stars": 87,
      "commit_history": {},
      "releases_since_pin": 0
    },
    "install": {
      "upstream": "mkdir -p ~/.local/bin && curl -fsSL https://raw.githubusercontent.com/Sentinel-One/ai-siem/main/mcp/docker/s1-secops-mcp-launch.sh -o ~/.local/bin/s1-secops-mcp-launch.sh && sh ~/.local/bin/s1-secops-mcp-launch.sh install",
      "upstream_evidence": "mcp/s1-secops-mcp/README.md#L74",
      "bundled": false
    },
    "scan": [
      {
        "tool": "cisco-skill-scanner",
        "version": "not-run",
        "llm_judge": false,
        "date": "2026-10-21",
        "result": "pending"
      }
    ],
    "privileges": {
      "method": "reach-v0.1",
      "declared": {
        "axes": {
          "fs": 2,
          "net": 1,
          "exec": 1,
          "cred": 2,
          "persist": 3,
          "hitl": 0
        },
        "evidence": {
          "fs": "mcp/s1-secops-mcp/README.md#L150 the author lets output files go anywhere under the home and temp directories by default, outside the working directory",
          "net": "mcp/s1-secops-mcp/README.md#L3 the author names only the SentinelOne console APIs as endpoints",
          "exec": "mcp/s1-secops-mcp/README.md#L131 the author names the fixed keychain programs security and secret-tool",
          "cred": "mcp/s1-secops-mcp/mcpb/manifest.json#L116 one console API token covers the management API, alerts, PowerQuery and the data lake, with a log write key and a VirusTotal key on top",
          "persist": "mcp/s1-secops-mcp/README.md#L77 the recommended installer adds three MCP servers to the Claude Desktop configuration, which is a change to agent configuration",
          "hitl": "mcp/s1-secops-mcp/README.md#L51 the author declares the server read-only by default, with write enabled only by the operator, and declares no pre-approvals"
        }
      },
      "static": {
        "level": 2,
        "axes": {
          "fs": 2,
          "net": 1,
          "exec": 1,
          "cred": 2,
          "persist": 2,
          "hitl": null
        },
        "evidence": {
          "fs": "mcp/s1-secops-mcp/lib/output.js#L30 output files go under the home and temp directories by default, and write mode deletes data-lake files and workflows on the tenant",
          "net": "mcp/s1-secops-mcp/lib/s1.js#L69 management API calls are pinned to the configured console origin, and there is no listener because the HTTP transport was removed",
          "exec": "mcp/s1-secops-mcp/lib/keystore.js#L133 the server starts only fixed keychain programs, without a shell",
          "cred": "mcp/s1-secops-mcp/lib/keystore.js#L46-50 three named secrets are read from environment variables or from the server's own keychain items",
          "persist": "mcp/s1-secops-mcp/tools/hyperautomation.js#L283 write mode imports Hyperautomation workflows and other tools replace policies, which changes target configuration",
          "hitl": "no evidence: no pre-approvals were found, but the search patterns for approvals match several lines, so a zero cannot be written"
        },
        "unknown": [
          "hitl"
        ]
      },
      "min_config": {
        "status": "derived",
        "note": "derived from the code, not tested in the lab; keep the default read-only mode, give the console token the Viewer role, and run index.js from a clone at the pinned commit instead of the launcher from the main branch"
      },
      "override": null,
      "reviews": []
    },
    "status": {
      "tier": "listed",
      "last_checked": "2026-10-21",
      "next_check": "2027-01-19",
      "freshness": "fresh",
      "superseded": false,
      "superseded_by": null,
      "added": "2026-10-21",
      "added_by": "scout"
    },
    "evidence": {
      "runs": [],
      "badge": "/badge/sentinelone-s1-secops-mcp.svg"
    },
    "changes": []
  },
  "profile": {
    "schema_version": "0.1",
    "entry": "sentinelone-s1-secops-mcp",
    "draft": "review",
    "commit": "b84fba9f6e838ee7bda1038f2ea8a4e0c1320b2a",
    "read_on": "2026-10-25",
    "check": {
      "date": "2026-10-25",
      "facts": 61,
      "confirmed": 61,
      "verified": 56
    },
    "overview": {
      "text": "A Node.js MCP server that gives an AI client tools for a SentinelOne tenant's Management Console, Singularity Data Lake, UAM Alert Interface and Hyperautomation APIs over stdio.",
      "ev": "mcp/s1-secops-mcp/README.md#L3 author's one-line description of the server"
    },
    "purpose": [
      {
        "text": "Provides PowerQuery, Management Console API, Unified Alert Management, Singularity Data Lake and Hyperautomation tools for one SentinelOne tenant.",
        "ev": "mcp/s1-secops-mcp/mcpb/manifest.json#L6 manifest description"
      },
      {
        "text": "Combines SentinelOne API access with SOC analyst context that it serves to the AI client.",
        "ev": "mcp/s1-secops-mcp/package.json#L4 package description"
      },
      {
        "text": "Ships in the ai-siem repository, which the author describes as a community-driven project for SentinelOne's AI SIEM, maintained by SentinelOne but not a formal product.",
        "ev": "README.md#L9 repository status note"
      }
    ],
    "use_cases": [
      {
        "text": "Triage UAM alerts by status, analyst verdict, assignee and notes; these changes are refused until read-only mode is turned off.",
        "task": "alert-triage",
        "ev": "mcp/s1-secops-mcp/mcpb/manifest.json#L7 long description lists alert triage actions"
      },
      {
        "text": "Run PowerQuery hunts and test STAR rule logic against Singularity Data Lake telemetry.",
        "task": "detection-engineering",
        "ev": "mcp/s1-secops-mcp/tools/powerquery.js#L73 powerquery_run description names its uses"
      },
      {
        "text": "Export full-event forensic timelines with the LOG raw-event search mode of powerquery_run.",
        "task": "dfir",
        "ev": "mcp/s1-secops-mcp/tools/powerquery.js#L106 queryType LOG description"
      },
      {
        "text": "Download RemoteOps-fetched files, threat files and CSV or ZIP exports from the console to a local file.",
        "task": "dfir",
        "ev": "mcp/s1-secops-mcp/tools/mgmt-console.js#L236 s1_api_download description"
      }
    ],
    "not_for": [
      {
        "text": "The author says to turn off read-only mode only when authorised to make changes in the tenant.",
        "ev": "mcp/s1-secops-mcp/mcpb/manifest.json#L103 read_only setting description"
      },
      {
        "text": "The credential commands setup, status and forget are meant for a terminal on the user's own machine, not inside a chat.",
        "ev": "mcp/s1-secops-mcp/README.md#L177 CLI usage note"
      },
      {
        "text": "The .mcpb Desktop Extension is built for Claude Desktop; other MCP clients use the keychain CLI or the Docker path.",
        "ev": "mcp/s1-secops-mcp/mcpb/README.md#L114-115 limits of the extension bundle"
      }
    ],
    "capabilities": {
      "coverage": "complete",
      "count": {
        "n": 35,
        "unit": "tools",
        "by": "author",
        "text": "The author states 35 tools across five groups.",
        "ev": "mcp/s1-secops-mcp/README.md#L10 auto-generated tools table header"
      },
      "groups": [
        {
          "name": "PowerQuery",
          "does": "powerquery_enumerate_sources, powerquery_run (PQ pipelines, LOG raw-event search, parallel time slices) and powerquery_schema_discover on the Singularity Data Lake.",
          "effects": [
            "reads"
          ],
          "enabled": "default",
          "ev": "mcp/s1-secops-mcp/README.md#L14-16 PowerQuery rows of the tools table"
        },
        {
          "name": "Mgmt Console",
          "does": "s1_api_get, s1_api_download, uam_list_alerts, uam_get_alert, uam_available_actions and purple_ai_alert_summary read console REST v2.1 and UAM GraphQL data.",
          "effects": [
            "reads"
          ],
          "enabled": "default",
          "ev": "mcp/s1-secops-mcp/lib/access.js#L40-46 tools classified as read"
        },
        {
          "name": "SDL API",
          "does": "sdl_list_files, sdl_get_file, sdl_list_dashboards and sdl_get_dashboard read SDL configuration files (parsers, dashboards, alerts, lookups) and dashboards at a scope.",
          "effects": [
            "reads"
          ],
          "enabled": "default",
          "ev": "mcp/s1-secops-mcp/lib/access.js#L44 SDL read tools"
        },
        {
          "name": "Hyperautomation",
          "does": "ha_list_workflows, ha_get_workflow and ha_export_workflow list, read and export Hyperautomation workflows as a ZIP archive.",
          "effects": [
            "reads"
          ],
          "enabled": "default",
          "ev": "mcp/s1-secops-mcp/lib/access.js#L45 Hyperautomation read tools"
        },
        {
          "name": "Write tools (S1_READ_ONLY=false)",
          "does": "18 WRITE_TOOLS: s1_api_put/patch/delete, four UAM triage writes, uam_post_alert, uam_ingest_alert, hec_ingest, six SDL tools, ha_import_workflow, ha_delete_workflow.",
          "effects": [
            "changes",
            "deletes"
          ],
          "enabled": "optional",
          "ev": "mcp/s1-secops-mcp/lib/access.js#L25-33 WRITE_TOOLS set including delete tools"
        },
        {
          "name": "UAM Ingest",
          "does": "uam_ingest_alert creates a synthetic test alert in Unified Alert Management (UAM) via the SentinelOne ingest API.",
          "effects": [
            "changes"
          ],
          "enabled": "optional",
          "ev": "mcp/s1-secops-mcp/tools/uam-ingest.js#L28 uam_ingest_alert description"
        },
        {
          "name": "CLI (setup / status / forget / exec)",
          "does": "setup, status and forget store, show and remove credentials in the OS keychain; exec starts another program with the stored values in its environment.",
          "effects": [
            "reads",
            "changes",
            "deletes",
            "runs-commands"
          ],
          "enabled": "default",
          "ev": "mcp/s1-secops-mcp/lib/cli.js#L2-7 CLI subcommands"
        },
        {
          "name": "Resources and prompts",
          "does": "sentinelone://soc-context and sentinelone://credentials-status resources, plus soc_analyst and session_init prompts that serve CLAUDE.md and a session start sequence.",
          "effects": [
            "reads"
          ],
          "enabled": "default",
          "ev": "mcp/s1-secops-mcp/README.md#L55-63 resources and prompts"
        }
      ]
    },
    "architecture": {
      "summary": {
        "text": "index.js starts either the credential CLI (setup, status, forget, exec) or the stdio server; server-core.js dispatches JSON-RPC over a stdin/stdout loop, keystore.js reads the OS keychain and credentials.js resolves each value from environment variables, then the keychain.",
        "ev": "mcp/s1-secops-mcp/README.md#L207-213 architecture listing"
      },
      "runs": {
        "where": "container",
        "text": "The recommended install runs the server in a container on the user's machine, behind a host launcher that reads the OS keychain.",
        "ev": "mcp/s1-secops-mcp/README.md#L71 Docker path description"
      },
      "modes": [
        {
          "where": "local-process",
          "mode": "Node from a clone",
          "switch": null,
          "text": "The MCP client starts node index.js from a clone of the repository.",
          "ev": "mcp/s1-secops-mcp/README.md#L109 Node mcpServers entry"
        },
        {
          "where": "local-process",
          "mode": "Claude Desktop Extension",
          "switch": null,
          "text": "A .mcpb Desktop Extension runs the server with Node inside Claude Desktop, with credentials from the extension settings.",
          "ev": "mcp/s1-secops-mcp/mcpb/manifest.json#L7 extension long description"
        }
      ],
      "parts": [
        {
          "name": "Keychain launcher (s1-secops-mcp-launch.sh)",
          "zone": "machine",
          "does": "Host launcher script the AI client starts; reads the OS keychain and hands the values to the container over stdin.",
          "ev": "mcp/s1-secops-mcp/README.md#L71 launcher role"
        },
        {
          "name": "s1-secops-mcp server",
          "zone": "container",
          "does": "The MCP server the host launcher runs from image sentinelone/secops-mcps:1.5.6 with the server name s1-secops-mcp.",
          "ev": "mcp/s1-secops-mcp/README.md#L84 launcher arguments with image tag"
        },
        {
          "name": "OS keychain",
          "zone": "machine",
          "does": "Holds each value under service sentinelone-mcp, account <profile>:<NAME>, profile from S1_PROFILE (default default); read once, then cached for the process.",
          "ev": "mcp/s1-secops-mcp/README.md#L129 keychain item naming"
        },
        {
          "name": "SentinelOne Management Console",
          "zone": "outside",
          "does": "The tenant's console, reached for the Mgmt Console REST API, LRQ PowerQuery, Purple AI and UAM GraphQL.",
          "ev": "mcp/s1-secops-mcp/lib/s1.js#L2 client scope"
        },
        {
          "name": "HEC ingest host",
          "zone": "outside",
          "does": "SentinelOne HEC ingest host (for example ingest.us1.sentinelone.net) to which the UAM Alert Interface tools push OCSF alerts.",
          "ev": "mcp/s1-secops-mcp/tools/uam-ingest.js#L2-3 ingest host"
        },
        {
          "name": "CLAUDE.md SOC context",
          "zone": "machine",
          "does": "SOC analyst instructions file loaded at startup and served as the soc-context resource and soc_analyst prompt.",
          "ev": "mcp/s1-secops-mcp/README.md#L257 CLAUDE.md loading"
        }
      ],
      "listens": [],
      "connections": [
        {
          "to": "SentinelOne Management Console",
          "kind": "vendor-api",
          "when": "always",
          "what": "Mgmt REST API calls to the configured console, authenticated with S1_CONSOLE_API_TOKEN in an Authorization: ApiToken header.",
          "ev": "mcp/s1-secops-mcp/README.md#L237 auth pattern for Mgmt REST"
        },
        {
          "to": "Singularity Data Lake (<console>/sdl)",
          "kind": "vendor-api",
          "when": "default",
          "what": "PowerQuery LRQ queries are launched at /sdl/v2/api/queries under the configured console URL.",
          "ev": "mcp/s1-secops-mcp/lib/s1.js#L312 LRQ launch URL"
        },
        {
          "to": "Purple AI (console GraphQL)",
          "kind": "vendor-api",
          "when": "optional",
          "what": "purple_ai_alert_summary sends the full OCSF alert JSON to the console GraphQL endpoint and returns a Purple AI summary.",
          "ev": "mcp/s1-secops-mcp/tools/mgmt-console.js#L272 purple_ai_alert_summary description"
        },
        {
          "to": "HEC ingest host",
          "kind": "vendor-api",
          "when": "optional",
          "what": "HEC log ingest posts to /services/collector/raw or /event on the S1_HEC_INGEST_URL host, with the SDL Log Write Key as Bearer.",
          "ev": "mcp/s1-secops-mcp/lib/hec.js#L10-13 host, endpoints and auth"
        },
        {
          "to": "raw.githubusercontent.com",
          "kind": "download",
          "when": "default",
          "what": "The documented one-line install downloads s1-secops-mcp-launch.sh from the main branch of Sentinel-One/ai-siem.",
          "ev": "mcp/s1-secops-mcp/README.md#L74 install command"
        },
        {
          "to": "sentinelone/secops-mcps image",
          "kind": "download",
          "when": "default",
          "what": "install pulls the container image and runs setup if no values are stored in the OS keychain.",
          "ev": "mcp/s1-secops-mcp/README.md#L77 install steps"
        }
      ],
      "model": {
        "who": "client",
        "text": "The AI client launches the server as a subprocess over stdio, and the client's model calls its tools.",
        "ev": "mcp/s1-secops-mcp/README.md#L3 client launches the server as a subprocess"
      }
    },
    "needs": [
      {
        "kind": "credentials",
        "text": "S1_CONSOLE_URL and S1_CONSOLE_API_TOKEN, a Management Console API token of a service user or console user, used by the Mgmt API, UAM, PowerQuery and SDL tools.",
        "ev": "mcp/s1-secops-mcp/mcpb/manifest.json#L116 api_token field description"
      },
      {
        "kind": "credentials",
        "text": "S1_HEC_TOKEN, an SDL Log Write Key minted for one account or site, is needed for hec_ingest only.",
        "ev": "mcp/s1-secops-mcp/README.md#L140 credential table row"
      },
      {
        "kind": "authorization",
        "text": "The console token's role is the authoritative control over writes; the server's read-only mode is a guard on top of it.",
        "ev": "mcp/s1-secops-mcp/lib/access.js#L9-10 guard versus token role"
      },
      {
        "kind": "authorization",
        "text": "ha_import_workflow needs the Hyper Automate.write permission on the token's role.",
        "ev": "mcp/s1-secops-mcp/tools/hyperautomation.js#L231 ha_import_workflow description"
      },
      {
        "kind": "runtime",
        "text": "Node 24 or later when running from a clone.",
        "ev": "mcp/s1-secops-mcp/README.md#L98 Node install path"
      },
      {
        "kind": "container",
        "text": "Docker for the recommended keychain-launcher install.",
        "ev": "mcp/s1-secops-mcp/README.md#L69 install path heading"
      },
      {
        "kind": "setting",
        "text": "Write tools need S1_READ_ONLY=false, which install --read-write adds to the Docker launcher entry.",
        "ev": "mcp/s1-secops-mcp/README.md#L90 enabling write"
      },
      {
        "kind": "tools",
        "text": "An OS keychain backend: /usr/bin/security on macOS, secret-tool with a D-Bus session on Linux, or @napi-rs/keyring on Windows; otherwise environment variables.",
        "ev": "mcp/s1-secops-mcp/README.md#L131 keychain backends"
      }
    ],
    "installer": [
      {
        "text": "The one-line install downloads s1-secops-mcp-launch.sh from the main branch (not a pinned commit) with curl into ~/.local/bin and runs it with sh install.",
        "ev": "mcp/s1-secops-mcp/README.md#L74 install command"
      },
      {
        "text": "install adds s1-secops-mcp, purple-mcp and virustotal entries to the Claude Desktop config (other entries kept, old file backed up), pulls the image and runs setup if no values are stored.",
        "ev": "mcp/s1-secops-mcp/README.md#L77 what install does"
      },
      {
        "text": "For the Node path, npm link in the server folder puts s1-secops-mcp on PATH; on Windows the keychain needs npm install @napi-rs/keyring.",
        "ev": "mcp/s1-secops-mcp/README.md#L114 Node install notes"
      }
    ],
    "limits": [
      {
        "text": "Read-only mode (default since 1.5.5) refuses the 18 write tools, s1_api_post outside a query allowlist and powerquery_run with | savelookup before any network request.",
        "ev": "mcp/s1-secops-mcp/README.md#L51 read-only default"
      },
      {
        "text": "With write enabled, s1_api_post is described for actions such as creating IOCs, isolating agents, adding exclusions, creating detection rules and triggering RemoteOps.",
        "ev": "mcp/s1-secops-mcp/tools/mgmt-console.js#L124 s1_api_post description"
      },
      {
        "text": "With no scope argument and no S1_SCOPE set, a PowerQuery runs across every account a global or multi-account token is authorized for.",
        "ev": "mcp/s1-secops-mcp/tools/powerquery.js#L16 scope description"
      },
      {
        "text": "The SOC context CLAUDE.md is looked up at S1_CLAUDE_MD_PATH, then in the server process's working directory, then in folders near index.js.",
        "ev": "mcp/s1-secops-mcp/lib/server-core.js#L33-38 CLAUDE.md candidates"
      },
      {
        "text": "sdl_create_dashboard shares new dashboards with all users in scope unless isPublic is set to false.",
        "ev": "mcp/s1-secops-mcp/tools/sdl-api.js#L286 isPublic default"
      },
      {
        "text": "outputFile (powerquery_run, s1_api_get, s1_api_download, ha_export_workflow) writes only inside S1_OUTPUT_DIRS, default home and temp, or in Docker only the install --output-dir folder; symlinks are refused.",
        "ev": "mcp/s1-secops-mcp/README.md#L150 output file rules"
      },
      {
        "text": "The author states the OS keychain does not isolate the stored tokens from other processes running as the same user.",
        "ev": "mcp/s1-secops-mcp/README.md#L154 security limit"
      },
      {
        "text": "exec runs another program (purple-mcp, the VirusTotal MCP, anything) with the keychain values in its environment, where the same OS user can read them (ps eww, /proc/<pid>/environ).",
        "ev": "mcp/s1-secops-mcp/lib/cli.js#L214-218 exec behaviour"
      },
      {
        "text": "Since 1.5.0 the server has no HTTP transport, no credentials file and no shared team server; each user runs their own instance with their own credentials.",
        "ev": "mcp/s1-secops-mcp/README.md#L5 author statement on removed transport and deployment"
      },
      {
        "text": "With write enabled, writes are refused without a console token (except hec_ingest) or with an expired JWT, and each allowed write logs one stderr line with tool and path, without request bodies or tokens.",
        "ev": "mcp/s1-secops-mcp/README.md#L179 write-mode checks and audit line"
      },
      {
        "text": "Paths passed to the s1_api_* tools must start with a single \"/\" and resolve to the configured console origin, so a path cannot send the ApiToken to another host.",
        "ev": "mcp/s1-secops-mcp/lib/s1.js#L52-58 origin pinning for model-supplied paths"
      },
      {
        "text": "The soc_analyst prompt returns the loaded CLAUDE.md inside a user message that tells the model to act as a Principal SOC Analyst and follow it precisely.",
        "ev": "mcp/s1-secops-mcp/lib/server-core.js#L205-213 soc_analyst prompt message"
      },
      {
        "text": "With write enabled, the initialize instructions ask the client's model to confirm intent with the user before creating, changing or deleting tenant objects.",
        "ev": "mcp/s1-secops-mcp/lib/server-core.js#L143-146 initialize instructions by mode"
      }
    ],
    "not_found": [
      {
        "field": "maturity",
        "searched": "README.md, mcp/s1-secops-mcp/README.md, CHANGELOG.md, mcpb/manifest.json for preview/experimental/alpha/beta/stable/deprecated; 'deprecated' appears only for npm 1.2.0 and the V1 query endpoint"
      },
      {
        "field": "listen",
        "searched": "index.js, lib/stdio-transport.js, lib/server-core.js, all lib/*.js and tools/*.js for listen/createServer/host/port; author states stdio only, HTTP transport removed in 1.5.0 (README.md#L5, index.js#L"
      },
      {
        "field": "autonomy",
        "searched": "entry type is mcp-server, not an agent"
      },
      {
        "field": "connection (telemetry)",
        "searched": "lib/*.js and tools/*.js for analytics/telemetry SDKs and extra hosts; only console URL and HEC ingest URL fetches found"
      }
    ]
  },
  "verdict": null,
  "runs": []
}
