ThreatLocker

io.github.wyre-technology由 GitHub 帳號 wyre-technology 發布v1.3.6更新於 Oct 24, 2026

MCP server for ThreatLocker — zero-trust endpoint protection, allowlisting, and policies.

概覽

AI 產生的概覽

面向 ThreatLocker Portal API 的 MCP 伺服器,讓助理用自然語言查看電腦、審批請求、稽核日誌與組織。

可以做什麼
  • 導覽各功能領域並檢查 API 連線狀態
  • 列出並檢視電腦詳細資料,包括簽到紀錄
  • 列出電腦群組及下拉選項
  • 列出並檢視審批請求,包括待處理數量與許可申請詳情
  • 搜尋稽核日誌項目、取得單筆紀錄及檔案歷史
  • 列出子組織、取得組織驗證金鑰以及可用於移動電腦的組織
適用情境
適合需要讓助理回答 ThreatLocker 零信任端點防護部署相關問題的情境,例如哪些電腦已納管、有哪些待處理審批、稽核日誌顯示了什麼,或組織階層如何劃分。
執行需求
以本機程序(stdio)方式從容器映像執行,或作為 HTTP 閘道服務執行。stdio 模式需要 THREATLOCKER_API_KEY 與 THREATLOCKER_ORGANIZATION_ID。閘道模式需要 AUTH_MODE=gateway、MCP_TRANSPORT=http 與 CONDUIT_S2S_SECRET,並透過 X-Threatlocker-Api-Key 及選用的 X-Threatlocker-Organization-Id 標頭逐次提供憑證。
安裝前請注意
需要 ThreatLocker API 金鑰(THREATLOCKER_API_KEY 或 X-Threatlocker-Api-Key)與組織 ID,可存取安全管理資料。其中一個工具會回傳組織驗證金鑰,屬於敏感憑證。閘道模式需要 CONDUIT_S2S_SECRET,缺少有效的 X-Gateway-S2S 標頭會被拒絕。MCP_ALLOW_INSECURE_DEV=1 會略過該檢查,僅限本機開發使用。所列工具看起來是唯讀的。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 ThreatLocker,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

ThreatLocker MCP Server

A Model Context Protocol (MCP) server that provides AI assistants with access to the ThreatLocker Portal API. Manage computers, approval requests, audit logs, and organizations through natural language interactions.

Features

  • Stateless Architecture: No session state required, fresh connections per request
  • Decision-Tree Navigation: Navigate domains with threatlocker_navigate
  • Gateway Mode: Multi-tenant support via HTTP headers
  • Elicitation Support: Interactive prompts for missing parameters
  • Comprehensive Error Handling: Detailed error messages and logging
  • Docker Support: Production-ready containerization

Tools

Navigation

  • threatlocker_navigate - Navigate to a domain to see available tools
  • threatlocker_status - Check API connection status and available domains

Computers

  • threatlocker_computers_list - List computers with filters (search, group, pagination)
  • threatlocker_computers_get - Get detailed computer information
  • threatlocker_computers_get_checkins - Get computer checkin history

Computer Groups

  • threatlocker_computer_groups_list - List computer groups with filters
  • threatlocker_computer_groups_dropdown - Get computer groups for dropdown selection

Approval Requests

  • threatlocker_approvals_list - List approval requests with status filters
  • threatlocker_approvals_get - Get detailed approval request information
  • threatlocker_approvals_pending_count - Get count of pending approvals
  • threatlocker_approvals_get_permit_application - Get permit application details

Audit Log

  • threatlocker_audit_search - Search audit log entries with filters
  • threatlocker_audit_get - Get one audit log entry by eActionLogId from a search row (deprecated alias: actionLogId)
  • threatlocker_audit_file_history - Get audit history for a file. Requires fullPath and either hostname or computerId

Organizations

  • threatlocker_organizations_list_children - List child organizations
  • threatlocker_organizations_get_auth_key - Get organization auth key
  • threatlocker_organizations_for_move_computers - Get organizations for computer moves

Configuration

Environment Variables

Stdio Mode (Direct API Access)
bash
THREATLOCKER_API_KEY=your_api_key_hereTHREATLOCKER_ORGANIZATION_ID=your_org_id_hereMCP_TRANSPORT=stdio
Gateway Mode (Multi-tenant)
bash
AUTH_MODE=gatewayMCP_TRANSPORT=httpMCP_HTTP_PORT=8080# Required. The HTTP server exits non-zero if this is empty.CONDUIT_S2S_SECRET=gateway-provisioned-secret# Optional. Unset binds 127.0.0.1. The container image sets 0.0.0.0.# MCP_HTTP_HOST=127.0.0.1

CONDUIT_S2S_SECRET is required for the HTTP transport. The process logs an error and exits non-zero when it is unset. For local development only, MCP_ALLOW_INSECURE_DEV=1 starts the server anyway and logs a loud warning; do not set that flag in production. The secret is never written to the logs.

When MCP_HTTP_HOST is unset, the server binds 127.0.0.1. The Dockerfile sets MCP_HTTP_HOST=0.0.0.0 so the process listens inside the container; publish that port on localhost.

Gateway Mode Headers

When running in gateway mode, include these headers with each request:

  • X-Gateway-S2S: Service-to-service proof from the gateway (t=<unix>,v1=<hmac>). Requests without a valid header are rejected with 401 when CONDUIT_S2S_SECRET is set.
  • X-Threatlocker-Api-Key: Your ThreatLocker API key (required). A request without it is rejected with 401 and does not fall back to THREATLOCKER_API_KEY.
  • X-Threatlocker-Organization-Id: Your organization ID (optional; the API defaults to the key's primary organization)

/health and /healthz stay unauthenticated and do not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.

Logging

bash
LOG_LEVEL=debug|info|warn|error  # Default: info

Local Development

  1. Clone the repository:
bash
git clone https://github.com/WYRE-AI/threatlocker-mcp.gitcd threatlocker-mcp
  1. Install dependencies:
bash
npm install
  1. Set environment variables:
bash
cp .env.example .env# Edit .env with your ThreatLocker credentials
  1. Build and run:
bash
npm run buildnpm start
# Or for development with hot reload:npm run dev
  1. Test the server:
bash
# Stdio modeecho '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | npm start
# HTTP mode. CONDUIT_S2S_SECRET is required unless you set# MCP_ALLOW_INSECURE_DEV=1 (local development only; logs a loud warning).# The server binds 127.0.0.1 unless MCP_HTTP_HOST is set.MCP_TRANSPORT=http AUTH_MODE=gateway CONDUIT_S2S_SECRET=dev-secret npm run start:httpcurl http://127.0.0.1:8080/health

Docker

Using Docker Compose

bash
# Required. Compose will not start if this is unset or empty.export CONDUIT_S2S_SECRET=gateway-provisioned-secret
# Pull and run latest image. The published port is 127.0.0.1:8080.docker compose up -d
# Or build locallydocker compose -f docker-compose.dev.yml up --build

Using Docker directly

bash
# Gateway mode (recommended). The container listens on 0.0.0.0 inside# the network namespace; publish it on localhost only. The process# exits if CONDUIT_S2S_SECRET is empty.docker run -d \  --name threatlocker-mcp \  -p 127.0.0.1:8080:8080 \  -e AUTH_MODE=gateway \  -e CONDUIT_S2S_SECRET=gateway-provisioned-secret \  ghcr.io/wyre-ai/threatlocker-mcp:latest
# Stdio modedocker run -d \  --name threatlocker-mcp \  -e THREATLOCKER_API_KEY=your_key \  -e THREATLOCKER_ORGANIZATION_ID=your_org_id \  -e MCP_TRANSPORT=stdio \  ghcr.io/wyre-ai/threatlocker-mcp:latest

Architecture

Directory Structure

src/├── domains/           # Domain-specific handlers│   ├── computers.ts│   ├── computer_groups.ts│   ├── approval_requests.ts│   ├── audit_log.ts│   ├── organizations.ts│   ├── navigation.ts│   └── index.ts├── utils/             # Utilities│   ├── client.ts      # ThreatLocker API client│   ├── logger.ts      # Structured logging│   ├── types.ts       # TypeScript types│   ├── server-ref.ts  # Server reference for elicitation│   └── elicitation.ts # Interactive prompts├── server.ts          # MCP server creation├── index.ts           # Stdio transport entry└── http.ts            # HTTP transport entry

Design Patterns

  • Domain Handlers: Each API area has its own handler with getTools() and handleCall()
  • Lazy Loading: Domain handlers are imported on-demand
  • Fresh Connections: New server instance per HTTP request for stateless operation
  • Credential Invalidation: Client is reset when credentials change
  • Elicitation Framework: Interactive prompts for missing parameters

License

Apache-2.0 - see LICENSE for details.

來源:README.md,提交 eb902de

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.3.6最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。