Skip to main content
Glama
BigfootBytes

threatlocker-mcp-server

by BigfootBytes

ThreatLocker MCP Server

An MCP (Model Context Protocol) server for interacting with the ThreatLocker Portal API through Claude Desktop, Claude Code, or any MCP-compatible client.

About

This server exposes ThreatLocker Portal functionality as MCP tools, enabling AI assistants to query computers, applications, policies, audit logs, and more. It supports both local (stdio) and remote (HTTP/SSE) transports.

Current Status: Full read/write support for applications and policies. Set THREATLOCKER_READ_ONLY=true to enforce read-only mode.

Related MCP server: DelineaMCP

Disclaimer

USE AT YOUR OWN RISK

This software is provided "as is" without warranty of any kind. This is an unofficial, community-developed integration and is not affiliated with, endorsed by, or supported by ThreatLocker.

  • API keys are currently stored in plain text (in environment variables, .env files, or MCP client config files). A more secure credential storage solution is planned for a future release.

  • Always test in a non-production environment first

  • Review the source code before deploying

  • Monitor API usage and audit logs

  • The authors are not responsible for any damages, security incidents, or unintended actions resulting from use of this software

By using this software, you accept full responsibility for its use in your environment.

Protecting API Keys with ThreatLocker Storage Control

Since API keys are stored in plain text, you can use ThreatLocker's own Storage Control to restrict which applications can read the config files. This ensures that even if an unauthorized process runs on your machine, it cannot access the keys.

Files to protect:

File

Used By

.env

MCP server (stdio mode)

claude_desktop_config.json

Claude Desktop

.mcp.json / ~/.claude.json

Claude Code

Recommended Storage Control policy:

  1. In ThreatLocker Portal, navigate to Application Control > Storage Control

  2. Create a Deny policy that blocks all applications from reading the config files listed above

  3. Create Permit policies that allow only the specific applications that need access. Example:

    • node.exe / node — for the MCP server process

    • Claude Desktop.exe / Claude Desktop — for Claude Desktop

    • claude — for Claude Code CLI

  4. Apply the policies to the relevant computer group

This way, ThreatLocker prevents any other process from reading your API keys, even though they are stored in plain text.

Installation

Prerequisites

docker pull ghcr.io/bigfootbytes/threatlocker-mcp-server:latest

Option 2: From Source

git clone https://github.com/BigfootBytes/threatlocker-mcp-server.git
cd threatlocker-mcp-server
npm install
npm run build

Configuration

Claude Desktop / Claude Code

Add to your MCP config file:

Client

OS

Config Path

Claude Desktop

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Claude Desktop

Windows

%APPDATA%\Claude\claude_desktop_config.json

Claude Desktop

Linux

~/.config/Claude/claude_desktop_config.json

Claude Code

All

Project .mcp.json or ~/.claude.json

Docker configuration:

{
  "mcpServers": {
    "threatlocker": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/bigfootbytes/threatlocker-mcp-server:latest"],
      "env": {
        "THREATLOCKER_API_KEY": "your-api-key",
        "THREATLOCKER_BASE_URL": "https://portalapi.g.threatlocker.com/portalapi",
        "THREATLOCKER_ORG_ID": "optional-managed-org-id"
      }
    }
  }
}

Node.js configuration:

{
  "mcpServers": {
    "threatlocker": {
      "command": "node",
      "args": ["/path/to/threatlocker-mcp-server/dist/index.js"],
      "env": {
        "THREATLOCKER_API_KEY": "your-api-key",
        "THREATLOCKER_BASE_URL": "https://portalapi.g.threatlocker.com/portalapi"
      }
    }
  }
}

Environment Variables

Variable

Required

Default

Description

THREATLOCKER_API_KEY

Yes*

-

API key (stdio mode)

THREATLOCKER_BASE_URL

Yes*

-

Portal API URL

THREATLOCKER_ORG_ID

No

-

Managed organization ID

TRANSPORT

No

stdio

Transport mode: stdio or http

PORT

No

8080

HTTP server port

LOG_LEVEL

No

INFO

Logging: ERROR, INFO, DEBUG

ALLOWED_ORIGINS

No

-

CORS origins (comma-separated)

THREATLOCKER_READ_ONLY

No

-

Set to true, 1, or yes to block all write operations server-wide

*Required for stdio mode. HTTP mode uses per-request headers.

ThreatLocker API URLs

Environment

Base URL

Production

https://portalapi.g.threatlocker.com/portalapi

Beta

https://betaportalapi.g.threatlocker.com/portalapi

Available Tools

CRUD Capabilities

Tool

Create

Read

Update

Delete

Description

computers

-

:white_check_mark:

-

-

Query computers, check-ins, install info

computer_groups

-

:white_check_mark:

-

-

List groups, dropdowns

applications

-

:white_check_mark:

-

-

Search apps, research details, files

policies

-

:white_check_mark:

-

-

View policies by ID or application

action_log

-

:white_check_mark:

-

-

Unified audit logs, file history

approval_requests

-

:white_check_mark:

-

-

Pending approvals, permit details

organizations

-

:white_check_mark:

-

-

Child orgs, auth keys

reports

-

:white_check_mark:

-

-

List and run reports

maintenance_mode

-

:white_check_mark:

-

-

Computer maintenance history

scheduled_actions

-

:white_check_mark:

-

-

Scheduled agent updates

system_audit

-

:white_check_mark:

-

-

Portal audit logs, health center

tags

-

:white_check_mark:

-

-

Network and policy tags

storage_policies

-

:white_check_mark:

-

-

Storage control policies

network_access_policies

-

:white_check_mark:

-

-

Network access control policies

versions

-

:white_check_mark:

-

-

Available ThreatLocker agent versions

online_devices

-

:white_check_mark:

-

-

Currently online/connected devices

Tool Details

Tool

Actions

computers

list, get, checkins, get_install_info

computer_groups

list, dropdown, dropdown_with_org, get_for_permit, get_by_install_key

applications

search, get, research, files, match, get_for_maintenance, get_for_network_policy

policies

get, list_by_application

action_log

search, get, file_history, get_file_download, get_policy_conditions, get_testing_details

approval_requests

list, get, count, get_file_download_details, get_permit_application, get_storage_approval

organizations

list_children, get_auth_key, get_for_move_computers

reports

list, get_data

maintenance_mode

get_history

scheduled_actions

list, search, get, get_applies_to

system_audit

search, health_center

tags

get, dropdown

storage_policies

get, list

network_access_policies

get, list

versions

list

online_devices

list

HTTP Mode (Remote Server)

For remote deployments, run in HTTP mode:

docker run -d -p 8080:8080 -e TRANSPORT=http ghcr.io/bigfootbytes/threatlocker-mcp-server:latest

Endpoints

Method

Endpoint

Auth

Description

GET

/health

No

Health check

GET

/tools

No

List available tools

GET

/sse

Yes

SSE stream (Claude Desktop)

POST

/messages

Session

SSE client messages

POST

/mcp

Yes

Streamable HTTP MCP

POST

/tools/:name

Yes

Direct REST API

Authentication Headers

Header

Required

Description

Authorization

Yes

ThreatLocker API key

X-ThreatLocker-Base-URL

Yes

Portal API base URL

X-ThreatLocker-Org-ID

No

Managed organization ID

Claude Remote Configuration

Streamable HTTP via mcp-remote (Claude Desktop):

Claude Desktop does not yet support Streamable HTTP natively. Use mcp-remote as a proxy:

{
  "mcpServers": {
    "threatlocker": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://your-server.example.com/mcp",
        "--header",
        "Authorization:${THREATLOCKER_API_KEY}",
        "--header",
        "X-ThreatLocker-Base-URL:${THREATLOCKER_BASE_URL}"
      ],
      "env": {
        "THREATLOCKER_API_KEY": "your-api-key",
        "THREATLOCKER_BASE_URL": "https://portalapi.g.threatlocker.com/portalapi"
      }
    }
  }
}

SSE (legacy):

{
  "mcpServers": {
    "threatlocker": {
      "url": "https://your-server.example.com/sse",
      "headers": {
        "Authorization": "your-api-key",
        "X-ThreatLocker-Base-URL": "https://portalapi.g.threatlocker.com/portalapi"
      }
    }
  }
}

Development

npm install       # Install dependencies
npm run build     # Compile TypeScript
npm test          # Run tests
npm run dev       # Watch mode

License

GPL-3.0 - see LICENSE for details.

Available Tools

18 tools
action_logThreatLocker Action LogA
Read-onlyIdempotent

Query ThreatLocker unified audit logs.

The action log records all application control events: permits, denies, network access, file operations, PowerShell execution, elevation requests, and more. This is your primary tool for investigating what happened on endpoints.

Common workflows:

  • Find all denies in last 24 hours: action=search, startDate="...", endDate="...", actionId=99

  • Find denies on a specific computer: action=search, ..., hostname="COMPUTER-NAME"

  • Find network blocks: action=search, ..., actionType=network, actionId=2

  • Find PowerShell executions: action=search, ..., actionType=powershell

  • Get details of a specific event: action=get, actionLogId="..."

  • Track a file's history across all computers: action=file_history, fullPath="C:\path\to\file.exe"

  • Aggregate by user to find who's triggering denies: action=search, ..., groupBys=[1]

  • Get file download details: action=get_file_download, actionLogId="..."

  • Get policy conditions for permit: action=get_policy_conditions, actionLogId="..."

  • Get testing environment details: action=get_testing_details, actionLogId="..."

Pitfalls:

  • onlyTrueDenies/simulateDeny only filter when used alone or together; they force actionId=99 internally. "True" deny = enforced block; "simulated" = would-have-blocked on a Monitor/Learning computer.

  • When calling get/get_file_download, pass the sourceTableId matching the row the eActionLogId came from (default 2=DenyActionLog will miss permit/baseline/eventlog events).

  • groupBys takes at most 2 fields; prefer it over fetching raw rows for aggregation.

  • username/deviceType are NOT supported search filters here (the V2 endpoint ignores them); pivot on hostname/fullPath/policyId or use groupBys=[1] to break down by user.

Permissions: View Unified Audit. Pagination: search action is paginated (use fetchAllPages=true to auto-fetch all pages). Performance: always use date filters — queries without startDate/endDate can be very slow on large organizations. Use groupBys to aggregate instead of fetching all raw rows. Key response fields: actionLogId, fullPath, processPath, hostname, username, actionType, policyName, applicationName.

Related tools: computers (find computer IDs), applications (identify apps), approval_requests (handle denied software)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYessearch=query logs with filters, get=single event details, file_history=all events for a file path, get_file_download=file download info, get_policy_conditions=policy conditions for permit, get_testing_details=testing environment details, build_search_string=produce the opaque saveParameters string for saved_searches.insert (same filters as search)
endDateNoEnd date for search (ISO 8601 UTC)
actionIdNoFilter by action: 1=Permit, 2=Deny, 3=Deny (Option to Request), 6=Ringfenced, 99=Any Deny
fullPathNoFile path for search filter or file_history (wildcards supported)
groupBysNoAggregate results by up to 2 fields. Common: 1=Username, 2=Process Path, 5=Policy Id, 6=Policy Name, 7=App Id, 8=App Name, 9=Action Type, 11=Hash, 17=Asset Name, 65=Computer Id, 70=Risk Score, 71=Risk State. See threatlocker://enums and the unified-audit KB for the full ~55-code list.
hostnameNoFilter by hostname for search or file_history (wildcards supported)
pageSizeNoResults per page (default: 25, max: 500)
policyIdNoFilter search by the GUID of the policy that handled the event. Find via policies first.
startDateNoStart date for search (ISO 8601 UTC)
actionTypeNoFilter by a single action type
computerIdNoComputer GUID to scope file_history. Find via computers list first.
pageNumberNoPage number (default: 1)
actionLogIdNoAction log GUID (required for get, get_file_download, get_policy_conditions, get_testing_details). Find via search action first.
actionTypesNoFilter by multiple action types in one query
simulateDenyNoInclude what-if denies from Monitor Only mode computers (default: false)
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
getAllParentsNoOn get: include the full parent-process chain for the event (default: false)
sourceTableIdNoSource table for get/get_file_download: 1=ActionLog, 2=DenyActionLog (default), 3=BaselineActionLog, 4=EventLogActionLog. Must match the source table of the row the eActionLogId came from.
onlyTrueDeniesNoShow only real enforced blocks, excluding simulated denies from Monitor Only mode (default: false)
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
showKnownThreatsOnlyNoRestrict search to events flagged as known threats (default: false)
showChildOrganizationsNoInclude child organization logs (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only and idempotent, and the description adds auth requirements, pagination behavior, performance caveats, and hidden couplings like onlyTrueDenies/simulateDeny forcing actionId=99 and sourceTableId default 2 missing other event tables. Nothing here contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded and sectioned into workflows, pitfalls, permissions, pagination, performance, key fields, and related tools. For a tool with 7 action modes and 22 parameters, every section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers all action modes, common workflows, failure modes, authorization, pagination, performance, and key response fields. With an output schema also present, nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description still enriches the schema with example query combinations, groupBys field codes, and cross-parameter constraints such as onlyTrueDenies forcing actionId=99. That is precisely the extra semantics needed for a 22-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Query ThreatLocker unified audit logs.' It then lists what the log contains and calls itself the 'primary tool for investigating what happened on endpoints', which distinguishes it from sibling tools like computers or applications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit common workflows for each action mode, negative filter guidance (username/deviceType are not supported, groupBys max 2), and a related-tools list for adjacent tasks. This lets the agent decide between action_log and its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

applicationsThreatLocker ApplicationsA
Destructive

Search, inspect, create, update, and delete ThreatLocker applications.

Applications are collections of file rules (hashes, paths, certificates) that define what software is allowed or denied. ThreatLocker comes with built-in applications for common software, and you can create custom ones.

Common workflows:

  • Find an application by name: action=search, searchText="Chrome"

  • Find apps by file hash: action=search, searchBy=hash, searchText="abc123..."

  • Find apps by certificate: action=search, searchBy=cert, searchText="Microsoft"

  • Get ThreatLocker research on an app: action=research, applicationId="..."

  • List files in an application: action=files, applicationId="..."

  • Find apps actively permitted: action=search, permittedApplications=true

  • Find recently created custom apps: action=search, category=1, orderBy=date-created

  • Find matching apps by file properties: action=match, hash="...", path="...", cert="..."

  • Get apps for maintenance mode: action=get_for_maintenance

  • Get app for network policy: action=get_for_network_policy, applicationId="..."

  • Create custom application: action=create, name="My App", osType=1

  • Update application metadata: action=update, applicationId="...", name="...", osType=1

  • Manage a child org's app: add managedOrganizationId="child-org-guid" to create/update

  • Add file rules to application: action=add_file, applicationId="...", osType=1, fileRules=[{hash:"..."}, {fullPath:"...", cert:"..."}]

  • Remove file rules from application: action=remove_file, applicationId="...", applicationFileIds=[7111524894, 7111524907] (get IDs via action=files)

  • Delete application (no policies): action=delete, applications=[{applicationId:"...", name:"...", organizationId:"...", osType:1}]

  • Force delete (with policies): action=delete_confirm, applications=[...]

Pitfalls:

  • Hash-only file rules must contain only the hash (no path/cert); file paths need double-escaped backslashes in JSON.

  • create makes metadata only — add file rules in a follow-up add_file call; then build a policy and deploy it.

  • remove_file needs applicationFileId values from action=files first.

  • Built-in applications take policy precedence over custom apps.

Permissions: Edit Application Control Applications. Pagination: search and files actions are paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: applicationId, name, osType, computerCount, policyCount. Research fields: concernRating, reviewRating, categories, countriesWhereCodeCompiled.

Related tools: policies (see policies using this app), action_log (see app activity), approval_requests (pending approvals for this app)

ParametersJSON Schema
NameRequiredDescriptionDefault
certNoCertificate subject for match action
hashNoSHA256 hash for match action
nameNoApplication name (required for create, update)
pathNoFull file path for match action
actionYessearch=find applications, get=details by ID, research=ThreatLocker security analysis, files=list file rules in app, match=find apps by file hash/cert/path, get_for_maintenance=apps for maintenance mode, get_for_network_policy=app for network policy, options=application dropdown/lookup for an org, create=create custom application (metadata only), update=update app name/description, add_file=add file rules to application, remove_file=remove file rules by ID, delete=delete applications (no policies), delete_confirm=force delete (with policies)
osTypeNoOS type: 0=All, 1=Windows, 2=macOS, 3=Linux, 5=Windows XP
certShaNoCertificate SHA for match action
orderByNoField to sort by (default: name)
categoryNoCategory: 0=All, 1=My Applications (Custom), 2=Built-In
hostNameNooptions: filter by hostname context.
isHiddenNoInclude hidden/temporary applications (default: false)
pageSizeNoResults per page (default: 25, max: 500)
searchByNoField to search by (default: app)
countriesNoISO country codes to filter by (use with searchBy=countries)
createdByNoCreated by path for match action
fileRulesNoFile rules for add_file action. Each defines a matching condition (hash, path, cert, etc.). Processed via two-step prepare+insert API.
validCertNoWhether the cert supplied for match is valid/trusted (default: true)
pageNumberNoPage number (default: 1)
searchTextNoSearch text for search and files actions
appliesToIdNooptions: scope to a computer/group/org GUID.
descriptionNoApplication description
isAscendingNoSort ascending (default: true)
processPathNoProcess path for match action
applicationsNoApplications to delete (required for delete/delete_confirm). Get details via get action first.
applicationIdNoApplication GUID (required for get, research, files, get_for_network_policy). Find via search action first.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
onlyPermittedNooptions: only return applications with active permit policies (default false).
includeBuiltInNooptions: include ThreatLocker built-in applications (default false).
organizationIdNooptions: organization GUID to list application options for (required).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
applicationFileIdsNoFile rule IDs to remove (required for remove_file). Get IDs via action=files first.
managedOrganizationIdNoParent-org GUID to manage a child organization's applications (sets the ManagedOrganizationId/OverrideManagedOrganizationId headers for create/update). Find via organizations.
permittedApplicationsNoOnly show apps with active permit policies (default: false)
includeChildOrganizationsNoInclude child organization applications (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses critical behavioral details: create is metadata-only, delete vs delete_confirm removes without or with policies, hash-only rules must avoid path/cert, built-in applications take precedence, pagination behavior, and permission requirements. No contradictions with annotations were found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it is front-loaded with the core purpose and organized into Common workflows, Pitfalls, Permissions, Pagination, and Key response fields. Every section earns its place given the tool's 14 actions and 34 parameters, and the formatting makes the information quickly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex CRUD-plus-research tool, the description covers workflows, pitfalls, required permissions, pagination, response fields, and related tools. It also lists key response fields and research fields, so an agent can interpret results without needing the output schema. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds substantial value by showing realistic action-parameter pairings, required prerequisites for parameters like applicationFileIds, and meaningful examples for search, match, create, update, add_file, and managedOrganizationId. This goes well beyond the schema's standalone explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the specific verbs (search, inspect, create, update, delete) and resource (ThreatLocker applications), then defines what an application is. The extensive workflow list makes each action's purpose concrete and distinguishes this tool from the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit common workflows for nearly every action, including parameter combinations like action=search, searchBy=hash. It also gives clear fallback and sequencing guidance, such as 'create makes metadata only — add file rules in a follow-up add_file call' and 'remove_file needs applicationFileId values from action=files first.' Related tools are named with their purpose, helping an agent choose this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

approval_requestsThreatLocker Approval RequestsA
Destructive

Query ThreatLocker approval requests.

When users encounter blocked software and request access, it creates an approval request. Admins review these requests to decide whether to permit the software by creating policies.

Common workflows:

  • List pending requests: action=list, statusId=1

  • Get pending request count: action=count

  • Find requests for a specific user: action=list, searchText="username"

  • Get request details: action=get, approvalRequestId="..."

  • Get file info for download/analysis: action=get_file_download_details, approvalRequestId="..."

  • Get permit options (apps, groups): action=get_permit_application, approvalRequestId="..."

  • Get storage request details: action=get_storage_approval, approvalRequestId="..."

  • Approve a request: action=permit. Two-step — call get_permit_application first, round-trip its opaque "json" blob into permitJson, then pick permitMode + policyLevel. Payload-verified, NOT live-tested: validate in a non-prod org before relying on it.

Request statuses: 1=Pending (needs review), 4=Approved, 6=Not Learned (learning mode), 10=Ignored, 12=Added to Application, 13=Escalated (from Cyber Heroes), 16=Self-Approved

Pitfalls:

  • list defaults to newest-first (isAscending=false) — the right default for triaging the pending queue.

  • Permitting a request is a two-step flow: call get_permit_application first and round-trip its opaque "json" blob; don't synthesize it.

  • Before approving a Built-In matching app, confirm the file isn't a shared DLL matching unrelated apps (you'd permit the whole built-in).

Permissions: View Approvals, Approve for Entire Organization/Group/Single Computer. Pagination: list action is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: approvalRequestId, username, fullPath, actionType, statusId, computerName, requestDateTime.

Related tools: action_log (see the deny event), applications (find matching apps), policies (create permits)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist=search requests, get=single request details, count=pending count, get_file_download_details=file download info, get_permit_application=permit options, get_storage_approval=storage request details, reject=reject a pending request with a reason, take_ownership=assign a request to yourself, permit=approve an application request (round-trip the opaque json blob), ignore=ignore a request, permit_storage=approve a storage/USB request (round-trip get_storage_approval json), get_testing_environment=file/testing-env details for a request
osTypeNopermit: 1=Windows, 2=macOS, 3=Linux, 5=Windows XP.
ruleIdNopermit: 0=manual rules, 1=Installation Mode 1hr, 2=Learning Mode 1hr, 3=Monitor Mode 1hr.
orderByNoField to order by (default: datetime)
commentsNopermit: comment on the request. NOTE: overwrites any existing comment if provided.
fullPathNopermit: file path of the requested file (use \\ for backslashes).
pageSizeNoResults per page (default: 25, max: 500)
statusIdNoFilter by status: 1=Pending (default for list), 4=Approved, 6=Not Learned, 10=Ignored, 12=Added to Application, 13=Escalated, 16=Self-Approved
ticketIdNopermit: ticket id. NOTE: overwrites existing value if provided.
computerIdNopermit: requesting computer GUID.
entityTypeNopermit_storage: scope level for a new policy (0=computer, 1=group, 2=org).
pageNumberNoPage number (default: 1)
permitJsonNopermit: the opaque "json" blob from get_permit_application, passed back VERBATIM. Do not synthesize or edit it.
permitModeNopermit: existing_app=add file rule to an existing application; matching_app=use a ThreatLocker-matched application; new_app=create a new application. Requires applicationId+applicationName (existing/matching) or newApplicationName (new).
policyNameNopermit_storage: name for the new storage policy (required for storageMode=new_policy).
searchTextNoFilter by text
appliesToIdNopermit_storage: entity GUID the new policy applies to.
isAscendingNoSort ascending. Default: false (newest-first), the right default for triaging the pending queue.
policyLevelNopermit: scope the resulting policy to the entire organization, the computer group, or just the requesting computer.
storageJsonNopermit_storage: the opaque "json" blob from get_storage_approval, passed back VERBATIM.
storageModeNopermit_storage: add_to_existing=attach the device to an existing storage policy (needs storagePolicyId); new_policy=create a new storage policy (needs policyName).
allFilePathsNopermit_storage: permit all file paths on the device (default: false); otherwise set selectedPath.
ignoreReasonNoReason shown to the requestor when ignoring (ignore action).
rejectReasonNoReason shown to the requestor when rejecting (reject action).
selectedPathNopermit_storage: specific path to permit when allFilePaths=false.
applicationIdNopermit: application GUID (required for permitMode existing_app/matching_app).
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
ignoreSubjectNoOptional response email subject for ignore.
manualOptionsNopermit: file-rule conditions. A hash rule = { "hash": "..." } and NOTHING else. A property rule = any of { fullPath, cert, processPath, createdBy } (pair at least two for a stronger rule).
sourceTableIdNoget_testing_environment: source log table (1=ActionLog, 2=DenyActionLog, 3=Baseline, 4=EventLog; default 2).
expirationDateNopermit_storage: approval expiry in UTC (YYYY-MM-DDTHH:MM:SSZ).
notifyOnIgnoreNoEmail the requestor on ignore (default: false).
organizationIdNopermit: organization GUID of the request.
responseReasonNoOptional response email body for reject.
applicationNameNopermit: application name (required for permitMode existing_app/matching_app).
computerGroupIdNopermit: computer group GUID (used as selectedComputerGroup when policyLevel=computer_group).
elevationStatusNopermit: 0=do not elevate, 1=elevate, 2=silent elevation (only with the Elevation product).
organizationIdsNopermit: parent-hierarchy GUID chain (child→…→root); usually 1 entry for a child-org request.
responseSubjectNoOptional response email subject for reject.
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
storagePolicyIdNopermit_storage: existing storage policy GUID (required for storageMode=add_to_existing).
notifyOnResponseNoEmail the requestor on response (reject/permit_storage; default: false).
allStorageDevicesNopermit_storage: apply to all storage devices (default: false).
approvalRequestIdNoApproval request GUID (required for get, get_file_download_details, get_permit_application, get_storage_approval). Find via list action first.
networkExclusionsNopermit: network exclusions applied to the resulting ringfence permit.
ringfenceActionIdNopermit: ringfence action id applied to the permit.
useExistingPolicyNopermit: update an existing policy affecting the computer instead of creating one (default false).
newApplicationNameNopermit: name for the new application (required for permitMode new_app).
elevationExpirationNopermit: elevation expiry in hours (used when elevationStatus>0).
showCurrentTierOnlyNoOnly show requests at the current approval tier (multi-tier/MSP escalation; default: false)
policyExpirationDateNopermit: expiry for the created policy in UTC (YYYY-MM-DDTHH:MM:SSZ).
requestorEmailAddressNopermit: requestor email. NOTE: overwrites existing value if provided.
ticketApprovalManagerNopermit: approval manager. NOTE: overwrites existing value if provided.
showChildOrganizationsNoInclude child organizations (default: false)
applicationOrganizationIdNopermit: organization GUID that owns the application (defaults to organizationId).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructive=true, readOnly=false, idempotent=false, openWorld=true; the description goes beyond by detailing the two-step permit flow, warning not to synthesize the opaque json blob, cautioning about Built-In matching apps matching unrelated shared DLLs, listing required permissions, and explicitly admitting 'Payload-verified, NOT live-tested: validate in a non-prod org before relying on it.' This is model transparency for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but appropriately so for a 55-param, 12-action tool. It is well-structured: summary, common workflows, statuses, pitfalls, permissions, pagination, key fields, related tools. It is front-loaded with the most useful workflows. Small deduction for some redundancy with schema descriptions (e.g., the opaque-json warning appears both in the schema and the description) and a few repetitive status/param notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a highly complex tool with 55 parameters, 12 actions, and no simple output contract explained, the description covers prerequisites (two-step flows), safety caveats, permission requirements, pagination behavior, response fields, status codes, and sibling relationships. It also mentions the open-world caveat via 'validate in a non-prod org.' Nothing essential for an agent to call the tool confidently seems missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does add meaning beyond the schema by grouping relevant parameters into workflows (permit flow, storage flow, list/count/get flow) and clarifying which action requires which preliminary call (get_permit_application before permit; get_storage_approval before permit_storage). It also adds high-level parameter semantics like 'fetchAlPages=true' for pagination and 'isAscending=false' as the right triage default. Minor deduction because much param-level detail is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource ('Query ThreatLocker approval requests') and quickly enumerates the domain: blocked-software requests created by users and reviewed by admins. It then provides concrete common workflows that distinguish the core actions (list, count, get, get_permit_application, permit) from one another, and names related siblings (action_log, applications, policies) to situate the tool. This is far beyond a vague one-liner.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use context for each common workflow, including specific parameter molds (action=list, statusId=1 for pending; searchText for user; two-step permit flow). It also gives alternatives: action_log for deny events, applications for matching apps, policies for creating permits, and even flags where the action is NOT live-tested. An agent can correctly select this tool and the right action without guessing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

computer_groupsThreatLocker Computer GroupsA
Read-onlyIdempotent

List and inspect ThreatLocker computer groups.

Computer groups organize computers and define policy scope. Policies are applied to groups, not individual computers. The "global" group (includeGlobal=true) permits applications across all groups.

Common workflows:

  • Get all groups with computers: action=list, includeAllComputers=true

  • Get group dropdown for UI/selection: action=dropdown

  • Get groups across organizations (MSP): action=dropdown_with_org, includeAvailableOrganizations=true

  • Filter by OS type: osType=1 (Windows), 2 (macOS), 3 (Linux)

  • Get groups for approval workflow: action=get_for_permit

  • Get group by install key: action=get_by_install_key, installKey="..."

Permissions: Super Admin (for list), Edit Computers, Edit Computer Groups, View Computers. Key response fields: computerGroupId, name, osType, computerCount, organizationId.

Related tools: computers (list computers in groups), policies (policies applied to groups)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist=full details with computers, dropdown=simple list for selection, dropdown_with_org=includes parent/child orgs, get_for_permit=groups for approval workflow, get_by_install_key=get group by 24-char install key
osTypeNoOS type: 0=All, 1=Windows, 2=macOS, 3=Linux, 5=Windows XP
installKeyNo24-character install key (required for get_by_install_key)
hideGlobalsNoHide global groups (dropdown action)
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
includeGlobalNoInclude global application-permitting group (list action)
computerGroupIdNoFilter by specific computer group GUID (list action)
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
includeIngestorsNoInclude ingestors (list action)
includeDnsServersNoInclude DNS servers (list action)
includeAllPoliciesNoInclude all policies attached to groups (list action)
includeAllComputersNoInclude all computers in response (list action)
includeParentGroupsNoShow parent computer groups (list action)
includeAccessDevicesNoInclude access devices (list action)
includeOrganizationsNoInclude accessible organizations (list action)
includeLoggedInObjectsNoAdd contextual path labels (list action)
includeRemovedComputersNoInclude removed computers (list action)
includeAvailableOrganizationsNoInclude child and parent organizations (dropdown_with_org action)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the global group's special 'permits applications across all groups' behavior, the policy-scope implication, required permissions, and key response fields. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: purpose, domain concept, common workflows, permissions, key fields, and related tools. Every section earns its place; the workflow bullet list is dense but scannable. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 18 parameters and 5 action variants plus an output schema, the description covers all critical decision points: common workflows, permissions, key response fields, and relationships to sibling tools. The output schema itself handles return-value details, so nothing essential is missing for selecting and invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning to several parameters by framing them in workflows (e.g., includeGlobal=true permits applications across all groups, osType enum examples, includeAllComputers for full group details). It also clarifies the 'global' concept and lists key response fields, enhancing the agent's understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('List and inspect ThreatLocker computer groups') and immediately clarifies the domain concept (groups organize computers and define policy scope). It also differentiates itself from sibling tools via the 'Related tools' line, explicitly stating computers lists computers in groups and policies are applied to groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Common workflows' section gives explicit action+parameter recipes for common scenarios: list with includeAllComputers, dropdown for UI selection, dropdown_with_org for MSP, osType filters, get_for_permit for approval workflow, and get_by_install_key with a 24-char key. It also lists required permissions. However, it does not explicitly state when NOT to use this tool versus alternatives, only a brief related-tools pointer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

computersThreatLocker ComputersA
Destructive

Query and inspect ThreatLocker computers.

Common workflows:

  • Find computers by logged-in user: action=list, searchBy=2, searchText="username"

  • Find computers by IP: action=list, searchBy=4, searchText="192.168.1.100"

  • List computers needing review: action=list, kindOfAction="NeedsReview"

  • Get computer details by ID: action=get, computerId="..."

  • View check-in history: action=checkins, computerId="..."

  • Get installation info for new deployments: action=get_install_info

  • Rename / re-group a computer: action=edit, computerId="...", computerGroupId="...", name="..."

  • Move a computer to another org: action=move_org, computerId="...", computerGroupId="...", organizationId="...", osType=1, targetComputerGroupId="...", targetOrganizationId="..."

  • Remove computers from the Portal: action=delete, deleteComputers=[{computerId, computerName, organizationId}] (same org; does NOT uninstall)

  • Restart every agent in the org: action=restart_org (includeChildOrganizations=true also hits child orgs)

  • Remove duplicate records: action=remove_duplicate

Pitfalls:

  • get returns the editable computer record, not live protection state; read current mode/isolation from list results or maintenance_mode history.

  • This is the triage entry point: find a box here, grab its computerId/organizationId/computerGroupId, then hand off to maintenance_mode, approval_requests, or action_log.

Permissions: View Computers, Edit Computers (for modifications), Install Computers (for install info). Pagination: list and checkins actions are paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: computerId, computerName, computerGroupName, lastCheckin, action (Secure/Installation/Learning/MonitorOnly), threatLockerVersion.

Related tools: computer_groups (manage groups), maintenance_mode (maintenance history), action_log (audit events)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew computer name (required for edit action).
actionYeslist=search computers, get=details by ID, checkins=connection history, get_install_info=deployment info, isolate=cut network (Detect+Agent>=8.2), lockdown=block executions+isolate, enable_protection=re-secure / clear isolation, baseline_rescan=re-profile system files, restart_service=restart the ThreatLocker agent service, edit=rename/move-group/proxy settings, move_org=move a computer to another organization, delete=remove computers from the Portal (does NOT uninstall), restart_org=restart every computer in the org, remove_duplicate=remove duplicate computer records
osTypeNomove_org: OS type of the computer (1=Windows, 2=macOS, 3=Linux, 5=Windows XP).
endDateNoIsolation/lockdown window end (ISO 8601 UTC).
optionsNoedit: ThreatLocker option names to set on the computer.
orderByNoField to sort by (default: computername)
pageSizeNoResults per page (default: 25, max: 500)
proxyURLNoedit: full proxy URL (proxyServerOption + proxyUrlEntry).
searchByNoField to search by: 1=Computer/Asset Name, 2=Username, 3=Computer Group Name, 4=Last Check-in IP, 5=Organization Name
permitEndNoRe-secure automatically at window end (default: true).
startDateNoIsolation/lockdown window start (ISO 8601 UTC).
computerIdNoComputer GUID (required for get, checkins, isolate, lockdown, enable_protection). Find via list action first.
pageNumberNoPage number (default: 1)
searchTextNoSearch text for list action
isAscendingNoSort ascending (default: true)
kindOfActionNoAdditional filter for computer state
action_filterNoFilter by computer mode for list action
applicationIdNoApplication scope for isolation: "autocomp" (default), "autogroup", or an application GUID.
computerGroupNoComputer group GUID for list action. Find via computer_groups first.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
hideHeartbeatNoHide heartbeat entries for checkins action
proxyUrlEntryNoedit: proxy host, e.g. "proxy.example.com".
enableLearningNoEnable a learning window during baseline_rescan (default: false).
organizationIdNoOwning organization GUID (required for isolate/lockdown/enable_protection).
useProxyServerNoedit: enable a proxy server (default: false).
computerGroupIdNoComputer group GUID for isolate/lockdown/enable_protection (optional).
deleteComputersNodelete: computers to remove from the Portal. ALL must be in the same organization. Removes from Portal only — does not uninstall the agent.
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
proxyServerOptionNoedit: proxy protocol, e.g. "https://".
childOrganizationsNoInclude child organizations (default: false)
enableLearningRescanNomove_org: enable Learning + baseline rescan after the move (default: false).
targetOrganizationIdNomove_org: destination organization GUID.
targetComputerGroupIdNomove_org: destination computer group GUID.
includeChildOrganizationsNorestart_org/remove_duplicate: also affect child organizations (default: false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/non-readOnly behavior, and the description reinforcees and expands this with critical nuances: delete removes from Portal but does NOT uninstall, get returns editable record not live protection state, restart_org can hit child orgs, and remove_dupicate is for duplicate records. No contradiction with annotations; the description adds material safety-relevant behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized into labeled sections: Common workflows, Pitfalls, Permissions, Pagination, Key response fields, Related tools. Front-loaded with the primary purpose, then bullet lists that are easy to scan. It is long, but appropriate for a 34-parameter multi-action tool where every section adds load-bearing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the large parameter count, output schema, and annotations, the description covers the essential operational context: how to find computers, what each major action does, permissions needed, pagination behavior, key response fields, and related tools. No critical gap that would leave an agent guessing how to invoke the tool for common workflows.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds real value by combining parameters into workflows (e.g. deleteComputers all in same org, fetchAllPages for paginated list/checkins, move_org requires osType + target ids). It doesn't fully enumerate every action's required parameter set, but the workflows and pitfalls cover the most important combinations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a clear verb + resource ('Query and inspect ThreatLocker computers') and the workflow list gives concrete action+parameter combinations for each major operation. The Related tools section explicitly names computer_groups, maintenance_mode, and action_log, distinguishing this tool from its siblings. Although the opening phrase 'Query and inspect' slightly undersells the mutating/delete actions, the workflow list quickly disambiguates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance with exact action+parameter recipes, e.g. 'Find computers by logged-in user: action=list, searchBy=2, searchText="username"'. Pitfalls direct agents away from get for live state and toward list or maintenance_mode history. It also positions the tool as the triage entry point and recommends hand-off to maintenance_mode, approval_requests, or action_log.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

maintenance_modeThreatLocker Maintenance ModeA
Destructive

Query ThreatLocker maintenance mode history for computers.

Maintenance mode temporarily changes a computer's protection level. Types include:

  • Monitor Only (1): Logs but doesn't block (audit mode)

  • Installation Mode (2): Allows new software installs, auto-learns new applications

  • Learning Mode (3): Monitors and records software usage without blocking

  • Tamper Protection Disabled (6): Allows ThreatLocker service changes

Common workflows:

  • View maintenance history for a computer: action=get_history, computerId="..."

  • Audit who put computers in installation mode: check history across computers

Maintenance mode history shows who enabled it, when, duration, and what applications were learned during that time.

Pitfalls:

  • Learning Mode (3) requires a "Default - (Group Name)" Default Deny policy to exist in the group, or it silently does nothing.

  • Isolation (14) and Lockdown (15) require ThreatLocker Detect and Agent >= 8.2.

  • usersList entries are "DOMAIN\USERNAME" and only apply when allUsers=false; default window is 1 hour if no end time is given.

Permissions: Edit Computers, Manage Application Control Installation Mode, Manage Application Control Learning Mode. Pagination: get_history is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: maintenanceModeId, maintenanceTypeId, displayName, startDateTime, endDateTime, addedBy, endedBy.

Related tools: computers (get computer IDs, see current mode), computer_groups (group-level modes)

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional notes recorded with the maintenance window.
actionYesget_history=paginated history for a computer, enable=put a computer into a maintenance mode (MaintenanceModeInsert), end=end an active maintenance window early (MaintenanceModeEndById), update_end_time=extend/shorten an active window (maintenanceTypeId must match the active mode)
allUsersNoApply to all users (default: true). When false, supply usersList.
pageSizeNoResults per page (default: 25, max: 500)
permitEndNoRe-secure automatically at window end (default: true).
usersListNo"DOMAIN\\USERNAME" entries; only used when allUsers=false.
computerIdYesComputer GUID (required). Find via computers list first.
pageNumberNoPage number (default: 1)
endDateTimeNoWindow end (ISO 8601 UTC) for enable. Defaults to +1 hour if omitted.
ticketNumberNoOptional ticket reference recorded with the maintenance window.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
startDateTimeNoWindow start (ISO 8601 UTC) for enable. Defaults to now if omitted.
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
maintenanceModeIdNoActive maintenance window GUID (required for end). Get it from get_history.
maintenanceTypeIdNoMaintenance type (required for enable/end): 1=MonitorOnly, 2=Installation, 3=Learning, 4=Elevation, 6=TamperProtectionDisabled, 14=Isolation, 15=Lockdown, 16=DisableOpsAlerts, 17=NetworkControlMonitorOnly, 18=StorageControlMonitorOnly, 19=InstallationLegacy. For end, must match the active mode.
maintenanceEndDateNoNew window end (UTC YYYY-MM-DDTHH:MM:SSZ) for update_end_time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoget_history: array of maintenance mode records
errorNo
successYes
paginationNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with readOnlyHint=false and destructiveHint=true annotations, the description adds substantial behavioral context: what each maintenance mode type does, silent failure of Learning Mode without a Default Deny policy, version requirements for Isolation/Lockdown, usersList format, default 1-hour window, required permissions, pagination behavior, and key response fields. This goes well beyond the annotations and is consistent with them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well organized into labeled sections: types, workflows, pitfalls, permissions, pagination, response fields, and related tools. Each section carries useful agent-facing information, and the complexity of a 16-parameter, 4-action tool justifies the length. A few points overlap with schema details, but the structure keeps it scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with multiple actions, pitfalls, and permissions, the description is remarkably complete. It explains when to use each workflow, what could silently go wrong, which permissions are required, how pagination works, what the key response fields are, and which sibling tools provide supporting data. Even with an output schema present, the description still adds valuable operational context without omitting critical guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful meaning beyond the schema: it explains mode IDs in human terms, warns about mode-specific pitfalls, clarifies usersList as 'DOMAIN\USERNAME' entries, and notes the default window when no end time is given. It does not restate raw parameter definitions but enriches how the parameters should be used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource: 'Query ThreatLocker maintenance mode history for computers.' It clearly differentiates the tool's history-focused purpose and later lists mode types, workflows, and related tools. However, the tool also supports enable/end/update_end_time actions, and the description never explicitly states those mutation capabilities as part of its purpose; they are only implied through pitfalls and the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete common workflows ('View maintenance history for a computer', 'Audit who put computers in installation mode') and points to related tools for complementary tasks: computers for IDs/current mode and computer_groups for group-level modes. It does not explicitly explain when to choose this tool over others or when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_access_policiesThreatLocker Network Access PoliciesA

Query ThreatLocker network access control policies.

Network access policies define firewall rules for endpoints — controlling which applications can make or receive network connections, and to which destinations (IPs, ports, domains).

Common workflows:

  • List all network access policies: action=list

  • Search by name: action=list, searchText="RPC"

  • Filter by computer group: action=list, appliesToId="group-id"

  • Get policy details by ID: action=get, networkAccessPolicyId="..."

Pitfalls:

  • Network Control has no Global policy level (unlike application control).

  • Tag-based rules need the tag label + id resolved via the tags tool (dropdown); parent-org tags use the "ParentOrg\TagName" format.

  • direction: 1=Inbound, 2=Outbound; policyActionId: 1=Permit, 2=Deny.

Permissions: Edit Network Control Policies, View Network Control Policies. Pagination: list action is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: networkAccessPolicyId, name, computerGroupName, isEnabled, applicationName.

Related tools: policies (application control policies), computer_groups (where policy applies), tags (network tags used in policies)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoPolicy name (required for create).
portsNoPort entries, e.g. ["20-25","3389"] (create).
actionYesget=single policy by ID, list=search/list network access policies, create=create a network control policy (deploy afterwards)
statusNo1=Active, 3=Inactive (default: 1).
allPortsNoMatch any port (create).
pageSizeNoResults per page (default: 25, max: 500)
protocolNo1=TCP, 2=UDP, 3=Both (default: 3).
directionNo1=Inbound, 2=Outbound (required for create).
allSourcesNoMatch any source (create).
pageNumberNoPage number (default: 1)
searchTextNoSearch text to filter policies
appliesToIdNoComputer group GUID to filter by. Find via computer_groups first.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
policyActionIdNo1=Permit, 2=Deny (required for create).
allDestinationsNoMatch any destination (create).
computerGroupIdNoOrg/group/computer GUID the policy applies to (required for create). No Global level in Network Control.
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
sourceLocationsNoSource locations (create).
destinationLocationsNoDestination locations (create).
networkAccessPolicyIdNoNetwork access policy GUID (required for get). Find via list action first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal read-write behavior (readOnlyHint=false), and the description adds useful operational context: permissions, pagination behavior, enum meanings for direction/policyActionId, and parent-org tag formatting. It does not disclose any create-side effects or deployment nuance, and the 'Query' framing downplays the mutation capability, so it is not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is clearly organized into definition, common workflows, pitfalls, permissions, pagination, key response fields, and related tools. It is long but every section earns its place given the tool's 20-parameter, three-action surface area, and the opening sentence is direct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 20 parameters, an output schema, and annotations, the description covers read workflows, filtering, pagination, permissions, and key pitfalls. The notable gap is that create is not represented in the common workflows or prose, leaving the mutating path to be inferred from the schema enum description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema by explaining tag label/id resolution, the 'ParentOrg\TagName' format, direction/policyActionId mappings, appliesToId lookup via computer_groups, and fetchAllPages behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the resource ('ThreatLocker network access control policies') and the primary read verb ('Query'), and it differentiates from sibling tools by noting 'Related tools: policies (application control policies)'. However, the tool's schema supports create as a first-class action, and the description's 'Query' opening plus common-workflow list only cover list/get, so the full purpose is understated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Common workflows' section gives concrete invocation patterns (action=list, searchText, appliesToId, action=get) and the pitfalls section tells agents about no-Global-level and tag-format constraints. It stops short of explicit 'use policies for application-control instead' routing, though the 'Related tools' line does clarify the sibling division.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

online_devicesThreatLocker Online DevicesA
Read-onlyIdempotent

Query ThreatLocker online devices.

Returns devices currently connected and reporting to the ThreatLocker platform. Useful for real-time visibility into which endpoints are active.

Common workflows:

  • Check how many devices are online right now: action=list

  • Verify a specific computer is connected: action=list, then search results for hostname

  • Monitor fleet connectivity after a network change: action=list, compare count to computers tool total

  • Paginate through large device lists: action=list, pageNumber=2, pageSize=100

Permissions: View Computers. Pagination: list action is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: computerName, computerGroupName, lastCheckin, ipAddress.

Related tools: computers (full inventory with details, modes, groups), computer_groups (group membership and structure)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist=get currently online devices
orderByNoField to sort by (e.g. lastcheckin)
pageSizeNoResults per page (default: 25, max: 500)
pageNumberNoPage number (default: 1)
isAscendingNoSort ascending when true
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNolist: array of online device objects
errorNo
successYes
paginationNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds valuable behavioral context: listing is paginated, fetchAllPages can auto-fetch up to 10 pages, the action parameter is currently limited to list, and View Computers permission is required. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with a short summary, bulleted workflows, permissions, pagination notes, key response fields, and related tools. It is longer than the minimum but every section adds operational value; only minor redundancy exists between 'currently connected' and 'active endpoints'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool, the description covers what the tool does, when to use it, permissions, pagination behavior, useful response fields, and related alternatives. The output schema handles return-value specifics, so nothing essential is missing for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description adds practical parameter semantics by demonstrating action=list, pageNumber=2, pageSize=100, and fetchAllPages=true in realistic workflows, which helps an agent select parameters meaningfully beyond the raw schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (ThreatLocker online devices), the operation (query/list), and the outcome (devices currently connected and reporting). It distinguishes itself from related tools by noting computers is for full inventory with details and computer_groups is for membership structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit common workflows with concrete examples, including checking online count, verifying a specific hostname, monitoring fleet connectivity, and paginating large lists. It also names related tools and their different purposes, giving the agent clear guidance on when to choose this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

organizationsThreatLocker OrganizationsA
Destructive

Query ThreatLocker organizations.

Organizations are the top-level containers in ThreatLocker. MSPs have a parent organization with child organizations for each client. Enterprises may have organizations per business unit or location.

Common workflows:

  • List child organizations: action=list_children

  • Search for a client org: action=list_children, searchText="client name"

  • List all nested children (full tree): action=list_children, includeAllChildren=true

  • Get installation auth key: action=get_auth_key

  • Get orgs available for moving computers: action=get_for_move_computers

  • Provision a client org: action=timezones (pick an id) → action=create_child, displayName="...", timezoneId="..." → get_auth_key → deploy

  • Rotate the org auth key: action=rotate_auth_key (DESTRUCTIVE — invalidates the old key and breaks existing deploy scripts)

The organizationId is needed for many API calls (policies, applications, etc.) to scope the request to a specific organization.

Pitfalls:

  • get_auth_key returns the install/auth key used to deploy agents and to resolve groups via computer_groups get_by_install_key.

Permissions: View Organizations, Edit Organizations, Super Admin - Child. Pagination: list_children is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: organizationId, name, displayName, dateAdded, computerCount.

Related tools: computers (computers in org), computer_groups (groups in org), policies (policies in org)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNocreate_child: RMM identifier used in deploy scripts (defaults to displayName). A mismatch creates duplicates.
actionYeslist_children=list child orgs, get_auth_key=installation key for current org, get_for_move_computers=orgs available for computer relocation, timezones=list valid timezone ids (for create_child), create_child=create a child organization, rotate_auth_key=generate a NEW org auth key (DESTRUCTIVE: breaks existing deploy scripts)
domainsNocreate_child: org domains (e.g. ["client.com"]).
optionsNocreate_child: org option names (inherits from parent if omitted).
orderByNoField to order by
pageSizeNoResults per page (default: 25, max: 500)
pageNumberNoPage number (default: 1)
searchTextNoFilter by name (for list_children)
timezoneIdNocreate_child: timezone id from action=timezones (required). Use the exact id value, not the display name.
displayNameNocreate_child: human-readable org name (required).
isAscendingNoSort ascending (default: true)
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
itarCompliantNocreate_child: restrict access/management to inside the USA (default false).
proxyUrlEntryNocreate_child: proxy URL; requires useProxyServer=true.
timeoutOnLoginNocreate_child: login timeout in minutes.
useProxyServerNocreate_child: enable proxy configuration (default false).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
proxyServerOptionNocreate_child: proxy protocol ("http://"/"https://"); requires useProxyServer=true.
includeAllChildrenNoInclude nested children (default: false)
elevationDefaultHoursNocreate_child: default elevation expiry hours (0=no expiration).
hasDisabledEmailNotificationsNocreate_child: disable user emails except password resets (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations by specifying what the destructive rotation does ('invalidates the old key and breaks existing deploy scripts'), what get_auth_key returns, pagination fetching behavior, required permissions, and key response fields. This gives the agent concrete behavioral expectations for each action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but exceptionally organized with labeled sections: workflows, pitfals, permissions, pagination, response fields, and related tools. Every section earns its place and adds operational value; the most critical workflow snippets are listed early.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 21 parameters and six actions, the description covers workflows, destruction warnings, permissions, pagination, response fields, and sibling-tool relationships. An output schema exists, and the description correctly avoids redundant return-value explanation while providing complementary operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3, and the description adds meaningful workflow context around parameters (e.g., timezoneId must come from action=timezones, name mismatches create duplicates, fetchAllPages vs pagination). It does not need to re-explain every parameter because the schema already covers them, but the action-to-parameter orchestration is valuable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as the entry point for ThreatLocker organizations and enumerates the distinct actions it supports (list_children, get_auth_key, create_child, etc.). It also defines organizations as top-level containers and distinguishes this tool from siblings like computers, computer_groups, and policies, so an agent can select it confidently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit common workflows with exact action values and parameter examples, such as listing children with searchText and creating a child org with timezoneId. It also states pitfals, pagination behavior, permissions, and related sibling tools, giving clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

policiesThreatLocker PoliciesA
Destructive

Manage ThreatLocker policies.

Use list_all to search policies by computer group / org / filter without an applicationId; use list_by_application when you already have an applicationId.

Policies define what applications can run on which computer groups. A policy links an application (set of file rules) to a computer group with an action (permit/deny/ringfence).

Common workflows:

  • Get policy details by ID: action=get, policyId="..."

  • List all policies for an application: action=list_by_application, applicationId="...", organizationId="..."

  • Find policies for a specific group: action=list_by_application, applicationId="...", organizationId="...", appliesToId="group-id"

  • Include deny policies in results: action=list_by_application, ..., includeDenies=true

  • Create new policy: action=create, name="...", applicationIds=["..."], computerGroupId="...", osType=1, policyActionId=1

  • Update policy (full replace - get first!): action=update, policyId="...", name="...", applicationIds=["..."], computerGroupId="...", osType=1, policyActionId=1

  • Delete policies: action=delete, policyIds=["..."], organizationId="..."

  • Copy policies between groups: action=copy, osType=1, policyIds=["..."], sourceAppliesToId="...", sourceOrganizationId="...", targetAppliesToIds=["..."]

  • Deploy pending changes: action=deploy, organizationId="..."

IMPORTANT: After create/update/delete/copy, deploy changes with action=deploy to push to computers. IMPORTANT: Update is a full replace — use action=get first to read current values, then provide ALL fields.

Policy actions: Permit (allow), Deny (block), Ringfence (allow but restrict network/storage access)

Pitfalls:

  • Precedence is first-match-wins (Global > Global Group > Entire Org > Computer > Computer Group). New policies land at the bottom unless orderBefore=true.

  • monitorMode=1 (Secured) creates an explicit deny that overrides Learning Mode; monitorMode=2 is Monitor Only.

  • allowRequest/killRunningProcesses are only valid with policyActionId=2 (Deny).

  • Ringfence requires policyActionId=6 + ringfencingOptions (5 restrict flags + rf* arrays). rfFilePolicy permission: permit 1=read-only/2=read+write, deny 1=deny-write/2=deny-read+write. rfNetworkPolicy.server uses "tag:".

  • policySchedules requires policyScheduleStatus=2; networkExclusions pairs with restrictNetworkAccess=true.

  • update is FULL-REPLACE: get first, then resend ALL nested arrays (ringfencingOptions/policySchedules/networkExclusions/userGroups/parentProcessIdList/requestEmailAddressesList) you want to keep — omitting one removes it. Payload-verified, NOT live-tested.

  • Scoping: userGroups needs allUserGroups=false; deviceType needs allDevices=false; parentProcessIdList needs parentRestrictionEnabled=true (apps must match the policy osType); applicationSelection=1 (all apps) needs a name containing "Permit All" or starting "Default - "; notifyOnRequest/requestEmailAddressesList are Deny-only (policyActionId=2).

Permissions: View Application Control Policies, Edit Application Control Policies. Pagination: list_by_application is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: policyId, name, policyActionId, applicationId, computerGroupId, isEnabled.

Related tools: applications (what the policy permits), computer_groups (where policy applies), action_log (see policy enforcement)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoPolicy name (required for create, update)
actionYesget=single policy by ID, list_all=search/list policies for a group or org (no applicationId needed), list_by_application=all policies for an application, create=create new policy, update=update existing policy (full replace - use get first to read current values), delete=delete policies, copy=copy policies between groups, deploy=deploy pending policy changes
filterNolist_all filter: ""=all, nomatch, match, over6weeks, ringfence, noringfence, elevation, permitonly
osTypeNoOS type: 1=Windows, 2=macOS, 3=Linux, 5=Windows XP (required for create, update, copy)
endDateNoExpiration date in UTC (YYYY-MM-DDTHH:MM:SSZ). Used with policyScheduleStatus=1.
pageSizeNoResults per page (default: 25, max: 500)
policyIdNoPolicy GUID (required for get, update)
isEnabledNoEnable policy (default: true for create)
logActionNoLog to Unified Audit (default: true for create)
policyIdsNoPolicy GUIDs (required for delete, copy)
activeOnlyNolist_all: only return active policies
allDevicesNotrue=policy applies to all device types; false=restrict to deviceType.
deviceTypeNoSingle device interface to scope to (requires allDevices=false). Only one per policy.
pageNumberNoPage number (default: 1)
searchTextNoFree-text filter for list_all
userGroupsNoUser/AD-group scoping (requires allUserGroups=false). Re-send all on update or they are removed.
appliesToIdNoComputer group GUID to filter by. Find via computer_groups first.
descriptionNoPolicy description / notes.
monitorModeNo0=Inherit, 1=Secured (explicit deny that overrides Learning Mode), 2=Monitor Only.
orderBeforeNoPlace the new policy at the top of its scope instead of the bottom (policy precedence is first-match-wins).
allowRequestNoAllow users to request access when denied. Only valid with policyActionId=2 (Deny).
allUserGroupsNotrue=policy applies to all users; false=restrict to userGroups. Full-replace on update.
applicationIdNoApplication GUID (required for list_by_application). Find via applications search first.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
includeDeniesNoInclude deny policies (default: false)
applicationIdsNoApplication GUIDs (required for create, update). Mapped to applicationIdList.
organizationIdNoOrganization GUID (required for list_by_application, deploy). Find via organizations first.
policyActionIdNo1=Permit, 2=Deny, 6=Permit+Ringfence (required for create, update)
computerGroupIdNoComputer group GUID (required for create, update)
elevationStatusNo0=None, 1=Elevate+Notify, 2=Silent, 3=Force Standard User
notifyOnRequestNoEmail admins on approval requests. Only valid with policyActionId=2 (Deny); requires requestEmailAddressesList.
policySchedulesNoRecurring schedule windows (requires policyScheduleStatus=2).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
showAllPoliciesNolist_all: include inherited higher-level policies
elevationEndDateNoExpiry for an elevation policy in UTC, distinct from endDate.
networkExclusionsNoInternet-ringfence exclusions (pairs with ringfencingOptions.restrictNetworkAccess=true).
sourceAppliesToIdNoSource computer group GUID (required for copy)
ringfencingOptionsNoRingfencing config (requires policyActionId=6). 5 restrict flags are required; rf* arrays are optional.
targetAppliesToIdsNoTarget computer group GUIDs (required for copy)
parentProcessIdListNoApplication GUIDs allowed to launch this policy's apps (requires parentRestrictionEnabled=true; all must match the policy osType). Full-replace on update.
applicationSelectionNo0=use applicationIds (default), 1=all applications. Value 1 requires the policy name to contain "Permit All" or start with "Default - ".
killRunningProcessesNoKill running processes when policy denies. Only valid with policyActionId=2 (Deny).
policyScheduleStatusNo0=None, 1=Expiration, 2=Schedule
sourceOrganizationIdNoSource organization GUID (required for copy)
parentRestrictionEnabledNoEnable parent-process restriction (requires parentProcessIdList).
requestEmailAddressesListNoAdmin emails notified on requests (with notifyOnRequest=true; Deny-only). Full-replace on update.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations: it discloses that update is a full-replace requiring get first, that changes must be deployed, that precedence is first-match-wins, that monitorMode=1 overrides Learning Mode, and that the implementation is payload-verified but not live-tested. These are non-obvious behavioral traits that materially affect safe invocation and are not conveyed by annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but topically organized and mostly dense. It earns its length given 46 parameters and 8 actions. However, the full-replace warning is effectively given three times: in the workflow bullet, in the 'IMPORTANT' callout, and again in the Pitfalls section. This redundancy prevents a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, mutating tool with 46 parameters and many actions, the description covers workflow examples, pitfalls, scoping constraints, permissions, pagination, key response fields, and related tools. An output schema exists, so return-value documentation is not required here, and what is included is sufficient for an agent to select and invoke the tool correctly in most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning: it maps each action to its required parameters, gives concrete example values, explains conditional validity constraints (e.g., allowRequest and killRunningProcesses are Deny-only, ringfencing requires policyActionId=6), and warns about full-replace behavior for nested arrays on update. This is genuinely valuable beyond the property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Manage ThreatLocker policies' and then immediately defines a policy as linking an application (set of file rules) to a computer group with an action. This makes the specific object and domain clear, and the explicit comparison between list_all and list_by_application plus the 'Related tools' section distinguishes it from sibling tools such as network_access_policies and storage_policies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use list_all vs list_by_application, provides a set of common workflows with required parameters per action, and adds critical routing guidance such as 'After create/update/delete/copy, deploy changes with action=deploy'. Alternatives like applications, computer_groups, and action_log are named and their role in the policy workflow is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reportsThreatLocker ReportsA
Read-onlyIdempotent

Query and run ThreatLocker reports.

Access pre-built and custom reports configured in the ThreatLocker portal. Reports provide aggregated views of security data across your organization.

Common workflows:

  • List all available reports: action=list

  • Run a specific report: action=get_data, reportId="..." (get IDs from list action first)

  • Review security posture: list reports, then run relevant compliance or audit reports

  • Export data for external analysis: run a report and process the returned data

Permissions: View Reports. Key response fields: reportId, name, description, reportData (dynamic columns per report type).

Related tools: action_log (raw audit events), system_audit (portal audit trail), computers (device inventory)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist=show available reports, get_data=run report and get results
endDateNoEnd of the report window (ISO 8601 UTC).
reportIdNoReport GUID (required for get_data action). Find via list action first.
startDateNoStart of the report window (ISO 8601 UTC). Omit to use the report default window.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
offsetInMinutesNoTimezone offset in minutes for date bucketing (e.g. -300 for UTC-5). Default: 0 (UTC).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
includeChildOrganizationsNoInclude child organizations in the report (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false; the description adds that reports are aggregated views and requires 'View Reports' permission, plus notes reportData is dynamic. No contradiction exists, and the added context about permission and aggregation goes beyond what annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-sentence purpose, then uses compact bullet-style workflows. Every section earns its place, though 'Export data for external analysis' is somewhat obvious; still, clarity and structure are strong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description supplies the remaining selection context: permissions, related tools, key response fields, and planned workflows. An agent can navigate list/get_data and know when to choose a sibling tool. Complete for this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All parameters are described in the schema (100% coverage), so the baseline is 3. The description's workflows add meaning by showing how action and reportId relate (list first, then get_data) and indicating the report window defaults and output format, going slightly beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Query and run ThreatLocker reports,' a specific verb+resource combination, and clarifies it covers pre-built and custom reports. It distinguishes from siblings via the 'Related tools' line and the aggregation focus, so an agent can tell reports from raw audit or device inventory tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Common workflows' section explicitly maps actions to tasks (list, get_data, export) and instructs to get reportId from the list action first. It lists related tools like action_log and system_audit for raw events/trail, implying this tool is for aggregated views, though it never explicitly states when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

saved_searchesThreatLocker Saved SearchesA
Destructive

Manage saved Unified Audit / investigation searches.

A saved search has two parts: searchData (the reproducible parameters, as JSON) and saveParameters (a human-readable label). saveSearchPageId selects which page the search belongs to (valid values 1-10; e.g. the Unified Audit page).

Common workflows:

  • List saved searches for a page: action=list, saveSearchPageId=

  • Save a search: action_log build_search_string (→ saveParameters label) → action=insert, saveSearchId=, saveSearchPageId=, organizationId="...", searchName="...", saveParameters="Any Deny", searchData={the search params object}

  • Delete a saved search: action=delete, saveSearchId="..."

Pitfalls:

  • searchData is REQUIRED and must be valid JSON (object or JSON string) — the API deserializes it and returns an opaque 500 if it is missing or malformed. (Verified live 2026-07-06.)

  • saveParameters is the display label from action_log build_search_string (e.g. "Any Deny").

  • saveSearchPageId must be a valid page type (1-10); 0/other values return "Page type wasn't found".

  • insert requires you to supply a fresh saveSearchId GUID.

Permissions: View Unified Audit.

Related tools: action_log (build_search_string produces saveParameters)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist=saved searches for a page, insert=save a new search, delete=delete a saved search
datetimeNoOptional created timestamp (UTC).
usernameNoOptional owner username.
searchDataNoREQUIRED for insert: the search parameters that make the search reproducible, as a JSON object or JSON string. The API deserializes this server-side, so it MUST be valid JSON (missing/non-JSON => opaque 500).
searchNameNoDisplay name of the saved search (required for insert).
searchCountNoOptional usage counter.
saveSearchIdNoSaved-search GUID. For insert, supply a NEW GUID; for delete, the existing one.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
organizationIdNoOrganization GUID (required for insert).
saveParametersNoHuman-readable search label from action_log build_search_string, e.g. "Any Deny" (required for insert). Round-trip verbatim.
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
saveSearchPageIdNoThe page/feature the saved searches belong to (required for list and insert; e.g. the Unified Audit page id).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing verified failure modes (opaque 500 on malformed searchData, 'Page type wasn't found' for invalid saveSearchPageId), requiring a fresh GUID for insert, and noting the round-trip requirement for saveParameters. This gives an agent concrete expectations for what happens and what to avoid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with workflows, pitfalls, permissions, and related tools. There is minor redundancy (saveParameters is described in both the intro and the pitfalls), but the extra length is justified by the complexity and risk of the operations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the return format does not need to be explained. All operational prerequisites, failure modes, required parameters per action, and related tools are covered, making the description complete for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already covers all 12 parameters, the description adds critical operational semantics: valid saveSearchPageId range (1-10), the requirement to generate a new saveSearchId for insert, that searchData must be valid JSON and is server-side deserialized, and that saveParameters comes from action_log. These details materially improve correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource ('saved Unified Audit / investigation searches') and the three concrete operations (list, insert, delete) that make up 'manage'. It distinguishes the tool from siblings by naming the action_log relationship and by scoping the resource to saved searches rather than audits or policies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit workflows for list, save, and delete, including exact parameter mappings for each workflow. It also names the related tool (action_log) and states when to use it (build_search_string produces saveParameters), plus the required permission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scheduled_actionsThreatLocker Scheduled ActionsA

Query ThreatLocker scheduled agent actions.

Scheduled actions are pending operations on ThreatLocker agents, primarily version updates. Updates are batched and scheduled within maintenance windows to avoid disruption.

Common workflows:

  • List all scheduled actions: action=list

  • Search with filters: action=search, organizationIds=["..."], computerGroupIds=["..."]

  • Get scheduled action details: action=get, scheduledActionId="..."

  • Get available targets for scheduling: action=get_applies_to

Scheduled action types: Version Update (scheduledType=1).

Pitfalls:

  • isAscending is inverted by the API: true (or omitted) sorts descending (high to low); set false for ascending.

  • search (GetByParameters) is keyed by scheduledId — pass it to filter to a specific scheduled action's computers; use list for the top-level set.

Permissions: Edit Computers, Edit Computer Groups, View Computers. Pagination: search action is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: scheduledAgentActionId, scheduledType, scheduledDateTime, computerName, computerGroupName, status.

Related tools: computers (see current versions), computer_groups (target groups for updates), organizations (filter by org)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist=all scheduled actions, search=filtered search, get=single action details, get_applies_to=available scheduling targets, schedule=schedule a batched agent version update, abort=cancel a scheduled action (abortAll=true for the whole action, or appliesTo=[computers] for specific ones)
osTypeNoFilter get_applies_to targets by OS: 1=Windows, 2=Mac, 3=Linux, 7=Red Hat Enterprise Linux 6
orderByNoField to sort by
abortAllNoabort: cancel the entire scheduled action across all targets. When true, appliesTo is ignored; when false/omitted, supply appliesTo.
pageSizeNoResults per page (default: 25, max: 500)
appliesToNoTargets for schedule (each {appliesToId, appliesToTypeId}); for abort, the computers to cancel (each {appliesToId}). Resolve ids via get_applies_to.
startDateNoWhen the rollout starts (ISO 8601). Defaults to now.
pageNumberNoPage number (default: 1)
searchTextNoFree-text filter for search (e.g. computer name).
batchAmountNoComputers updated per batch (REQUIRED for schedule). Omitting it would update the whole fleet at once.
isAscendingNoSort order. Note: the API inverts this — true (or omitted) returns results in descending order (high to low); set false for ascending. Default: true.
scheduledIdNoFilter search to the computers within a specific scheduled action (GUID). Find via list first.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
scheduledTypeNoScheduled type: 1=Version Update (the only supported type). Default: 1.
windowEndTimeNoDaily window end, 24h "HH:MM".
includeChildrenNoInclude child organizations (list and get_applies_to actions)
organizationIdsNoFilter by organization GUIDs. Find via organizations first.
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
targetVersionIdNoThreatLocker version GUID to roll out (schedule action). Get it from the versions tool value field.
windowStartTimeNoDaily window start, 24h "HH:MM".
computerGroupIdsNoFilter by computer group GUIDs. Find via computer_groups first.
scheduledActionIdNoScheduled action GUID (required for get). Find via list or search first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond annotations: the isAscending inversion pitfall, search being keyed by scheduledId, pagination behavior, required permissions, and key response fields. It also discloses that schedule/abort are mutations, which aligns with readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite being long, the description is well-structured with sections for workflows, pitfalls, permissions, pagination, response fields, and related tools. Every section earns its place given the tool's 22-parameter complexity and mixed read/write actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers typical workflows, important pitalls, permissions, pagination behavior, response fields, and relations to sibling tools. With an output schema present, no critical guidance is missing for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, baseline is 3, and the description adds meaning by explaining cross-parameter behavior: how scheduledId filters search, how batchAmount omission affects scheduling, how isAscending is inverted, and how fetchAllPages works. This exceeds what the schema alone provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the resource (ThreatLocker scheduled agent actions) and lists the main query workflows, distinguishing it from related tools. However, the opening verb 'Query' understates the tool's full scope, since the action enum also includes schedule and abort mutations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Common workflows map actions to use cases, and related tools are named with their purpose (computers, computer_groups, organizations). It gives good context but does not explicitly state when not to use this tool versus a specific alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

storage_policiesThreatLocker Storage PoliciesA
Read-onlyIdempotent

Query ThreatLocker storage control policies.

Storage policies define rules for file and folder access on endpoints — controlling which applications can read, write, or execute from specific storage locations (local drives, USB devices, network shares).

Common workflows:

  • List all storage policies: action=list

  • Search by name: action=list, searchText="USB"

  • Filter by computer group: action=list, appliesToId="group-id"

  • Get policy details by ID: action=get, storagePolicyId="..."

Pitfalls:

  • Read-only tool: storage policy creation/editing is not available via the public API (no documented write endpoint).

  • Storage policies are first-match top-down — permits must be ordered above denies.

Permissions: View Storage Control Policies, Edit Storage Control Policies. Pagination: list action is paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: storagePolicyId, name, policyType, osType, computerGroupName, isEnabled.

Related tools: policies (application control policies), computer_groups (where policy applies), applications (what the policy permits)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesget=single policy by ID, list=search/list storage policies
osTypeNoOS type: 0=All, 1=Windows, 2=macOS, 3=Linux, 5=Windows XP
pageSizeNoResults per page (default: 25, max: 500)
pageNumberNoPage number (default: 1)
policyTypeNoFilter by policy type (integer). Note: valid values are not documented in the public API/KB; pass only if you know the value from the portal.
searchTextNoSearch text to filter policies
appliesToIdNoComputer group GUID to filter by. Find via computer_groups first.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
storagePolicyIdNoStorage policy GUID (required for get). Find via list action first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and idempotentHint annotations, the description discloses that no public write endpoint exists, that policies evaluate first-match top-down with permits above denies, lists required permissions, states pagination behavior, and notes key response fields. This is rich behavioral disclosure with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well structured with a clear summary line, common workflows, pitfalls, permission/pagination notes, and related tools. Content is front-loaded and every bullet adds operational value without redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with annotations and an output schema, the description covers usage workflows, domain semantics, limitations, permissions, pagination, and key response fields. Nothing essential seems missing for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaningful parameter usage patterns with examples for `action`, `searchText`, `appliesToId`, `storagePolicyId`, and `fetchAllPages`, plus a caveat about `policyType` not being documented in public KB. This exceeds the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Query ThreatLocker storage control policies.' It clearly ties policies to file/folder access on storage locations and explicitly distinguishes from `policies` as application control policies in the Related tools section.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete common workflows for list/get, search, filtering, and pagination, and names `policies` as the related sibling with a parenthetical distinction (application control vs storage control). It doesn't explicitly say when NOT to use this tool or give contrastive conditions, but the context is strong enough for an agent to select correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_auditThreatLocker System AuditA
Read-onlyIdempotent

Query ThreatLocker portal audit logs.

System audit tracks administrator actions in the ThreatLocker portal: logins, policy changes, approvals, configuration modifications. This is different from action_log which tracks endpoint events.

Common workflows:

  • Find all logins in date range: action=search, startDate="...", endDate="...", auditAction=Logon

  • Find failed login attempts: action=search, ..., auditAction=Logon, effectiveAction=Denied

  • Find changes by a specific admin: action=search, ..., username="admin@company.com"

  • Find policy modifications: action=search, ..., auditAction=Modify, details="policy"

  • Get health center dashboard: action=health_center, days=7

  • Search health center by location: action=health_center, searchText="lat:X&long:Y"

Audit actions: Create (new objects), Delete (removals), Logon (portal access), Modify (changes), Read (views). Supports * wildcard in text fields.

Permissions: View System Audit, View Health Center. Pagination: search and health_center actions are paginated (use fetchAllPages=true to auto-fetch all pages). Key response fields: systemAuditId, username, action, effectiveAction, details, ipAddress, dateTime.

Related tools: action_log (endpoint events, not portal events), organizations (filter by org)

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days for health_center (default: 7, min: 1, max: 365)
actionYessearch=query audit logs with filters, health_center=health dashboard data
detailsNoFilter by details text (wildcards supported)
endDateNoEnd date (ISO 8601 UTC)
objectIdNoFilter by specific object GUID
pageSizeNoResults per page (default: 25, max: 500)
usernameNoFilter by admin email address (maps to the API emailAddress field; wildcards supported)
ipAddressNoFilter by IP address
startDateNoStart date (ISO 8601 UTC)
pageNumberNoPage number (default: 1)
searchTextNoSearch text for health_center
auditActionNoFilter by audit action type
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
effectiveActionNoFilter by effective action
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
viewChildOrganizationsNoInclude child organizations (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial behavioral context: required permissions, pagination behavior with max pages, wildcard support, audit action semantics, and key response fields. This goes well beyond the structured annotation data and helps the agent predict side effects and invocation constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with a clear purpose, followed by a helpful common-workflow section and concise enum/pagination/permission notes. It is longer than minimal but every section earns its place; only minor redundancy with the schema's parameter descriptions prevents a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter tool with two distinct actions, the description is exceptionally complete: it covers both actions, provides concrete usage patterns, explains the key enum values, notes pagination and fetchAllPages, lists required permissions, identifies key response fields, and points to related tools. Since an output schema exists, return-value detail is not required. Nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter. The description adds extra meaning through examples (e.g., auditAction=Logon with effectiveAction=Denied for failed logins) and clarifies the audit action enum values (Create, Delete, Logon, Modify, Read) and wildcard usage. It doesn't fully compensate for every parameter's nuance, but it meaningfully augments the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Query ThreatLocker portal audit logs' and immediately clarifies what system audit tracks (administrator actions like logins, policy changes, approvals, configuration modifications). It explicitly differentiates itself from action_log, which tracks endpoint events, so an agent can distinguish this tool from its siblings without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance with common workflow examples for both actions (search and health_center), names the related tool action_log as the alternative for endpoint events, and states required permissions (View System Audit, View Health Center). It also explains pagination behavior, making it clear when fetchAllPages should be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tagsThreatLocker TagsA

Query ThreatLocker tags for network and policy management.

Tags are reusable labels for IP addresses, domains, ports, or other network identifiers. They simplify policy management by letting you reference "CRM Servers" instead of listing individual IPs.

Common workflows:

  • List all available tags: action=dropdown

  • Include ThreatLocker built-in tags: action=dropdown, includeBuiltIns=true

  • Get tag details by ID: action=get, tagId="..."

  • Update tag membership: action=update, tagId="...", organizationId="..." (full-object replace — get first, resend ALL item arrays you want to keep; there is no insert/delete endpoint)

Tags are used in:

  • Network Control policies (allow/deny traffic to tagged destinations)

  • Ringfencing (restrict app network access to tagged resources)

  • Storage Control (restrict file access to tagged paths)

Parent organization tags appear as "parentOrgName\tagName" format.

Pitfalls:

  • Use dropdown to get the label+value (tagId) needed when building network/ringfence policy payloads.

  • Parent-organization tags use the "ParentOrg\TagName" format.

Permissions: Edit Network Control Policies, Manage Tags, Edit Application Control Policies. Key response fields: tagId, name, tagType, values (IP/domain/port entries).

Related tools: policies (use tags in policy rules), applications (ringfence with tags)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTag name (update).
tagIdNoTag GUID (required for get, update). Find via dropdown action first.
actionYesget=single tag details, dropdown=list all available tags for selection, update=replace a tag's membership (full-object replace — get first, resend all items)
activeNoWhether the tag is active (update; default true).
tagTypeNoTag type filter: 1=Network tags (default)
allTagItemsNoupdate: optional flattened tag-item view (round-trip from get).
tagItemsIPv4Noupdate: IPv4 entries {label,value}. Full replace.
tagItemsIPv6Noupdate: IPv6 entries {label,value}. Full replace.
tagItemsTextNoupdate: text/domain entries {label,value}. Full replace.
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
organizationIdNoOrganization GUID that owns the tag (required for update).
includeBuiltInsNoInclude ThreatLocker built-in tags (default: false)
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
tagItemsReadablePathNoupdate: readable-path entries {label,value}. Use \\ in path values. Full replace.
tagItemsWritablePathNoupdate: writable-path entries {label,value}. Use \\ in path values. Full replace.
includeNetworkTagInMasterNoInclude network tags in master (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is rich in behavioral detail: full-object replace semantics, 'get first, resend ALL item arrays you want to keep', no insert/delete endpoint, parent-organization naming format, pagination, and permissions. These details go far beyond the annotations and help the agent avoid data loss; no contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with headers, workflows, pitfalls, permissions, and key fields, and it fronts the action patterns. It is long, but the 16-parameter surface justifies it; there is minor redundancy in the parent-tag naming format being stated twice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (16 parameters, multi-action dispatch, mutable update semantics), the description covers workflows, prerequisites, pitfalls, permissions, key response fields, and related tools. An output schema exists, so the lack of a full return spec is acceptable; the description is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description still adds workflow-level semantics: parameter combos for each action, the prerequisite of dropdown before get/update, full-replace behavior of item arrays, and the need for organizationId on update. This materially helps correct parameter selection beyond the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (ThreatLocker tags) and enumerates the exact actions (dropdown, get, update) with common workflows, so an agent can tell what the tool does. It slightly understates scope by opening with 'Query' when a full-object-replace update is also a core operation, but the body immediately corrects that.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Common workflows act as usage guidance: 'List all available tags: action=dropdown', 'Update tag membership: action=update, tagId=..., organizationId=...'. It gives clear contextual advice such as using dropdown to obttain tagId for policy payloads, though it does not explicitly state when not to use this tool versus a sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_requestsThreatLocker Upload RequestsA

Request and retrieve forensic file uploads from endpoints.

Common workflows:

  • Request a file upload: action=insert, uploadRequestId=, organizationId="...", computerId="...", shA256="..." (or filepath)

  • Retrieve an upload request: action=get, uploadRequestId="..."

Pitfalls:

  • The SHA-256 field is literally "shA256" (odd casing) in the API.

  • insert requires you to supply a fresh uploadRequestId GUID.

  • Writes are payload-verified, NOT live-tested.

Permissions: View Unified Audit / forensics.

Related tools: action_log (locate the file event), computers (get computerId)

ParametersJSON Schema
NameRequiredDescriptionDefault
hashNoThreatLocker hash of the file.
actionYesinsert=request a file upload from an endpoint (forensics), get=retrieve an upload request
shA256NoSHA-256 of the file (note the API field casing "shA256").
filenameNoFile name to upload.
filepathNoFull file path (use \\ for backslashes).
computerIdNoComputer GUID the file lives on (required for insert).
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
organizationIdNoOrganization GUID (required for insert).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown
uploadRequestIdNoUpload-request GUID. For insert, supply a NEW GUID; for get, the existing one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoResponse data — shape varies by action
errorNo
successYes
paginationNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses important behavioral caveats beyond annotations: the field casing quirk 'shA256', the need for a fresh GUID on insert, and 'Writes are payload-verified, NOT live-tested.' Annotation contradictions: false; readOnlyHint=false is consistent with write operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with 'Common workflows', 'Pitfalls', and 'Permissions' sections. Every sentence adds value, and key constraints are front-loaded before peripheral options.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 10 params, output schema, and annotations, the description covers the core actions, required fields, critical pitfalls, permissions, and related tools. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds workflow-level meaning: which parameters are required for insert vs get, the new-GUID requirement for uploadRequestId, and the shA256 casing pitfall. This enriches the schema without duplicating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb + resource: 'Request and retrieve forensic file uploads from endpoints.' It explicitly distinguishes the two core actions (insert vs get) and is clearly differentiated from related siblings like action_log and approval_requests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit common workflows with exact action values and required parameters ('action=insert, uploadRequestId=<new GUID>...'), plus related tools for supporting context (action_log for locating events, computers for computerId). It also states permissions needed, giving clear guidance on when and how to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

versionsThreatLocker VersionsA
Read-onlyIdempotent

Query available ThreatLocker agent versions.

Returns all agent versions available in the portal, including which are enabled for installation, which is the default for new groups, and when each was released.

Common workflows:

  • List all available versions: action=list

  • Find the latest version: action=list, look for highest version number with isEnabled=true

  • Check if a specific version is still available: action=list, search results for version string

  • Identify the default version for new computer groups: action=list, look for isDefault=true

  • Plan upgrade rollouts: action=list, compare to installed versions from computers tool

Permissions: Edit Computers, Edit Computer Groups, View Computers, Install Computers. No pagination — returns all versions in a single response. Key response fields: label (version string), value (version ID), isEnabled, dateTime (release date), isDefault, OSTypes.

Related tools: computers (see installed versions per machine), scheduled_actions (schedule version updates), computer_groups (group-level version settings)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist=get all available ThreatLocker agent versions
fetchAllPagesNoFetch all pages automatically (max 10 pages). Default: false (single page).
response_formatNoOutput format: markdown (default, human-readable) or json (structured)markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNolist: array of agent versions
errorNo
successYes
paginationNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, openWorld, idempotent, and non-destructe behavior. The description adds useful context: permissions required, response fields, and the claim 'No pagination — returns all versions in a single response.' However, that claim is in tension with the fetchAllPages parameter in the schema, which makes the behavioral guidance slightly inconsistent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into summary, workflows, permissions, pagination, response fields, and related tools; every section serves a purpose. Minor repetition of 'action=list' in each workflow bullet pads the text slightly, but it remains easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and strong annotations, the description does not need to explain return values, yet it still enumerates permissions, no-pagination behavior, key response fields, and common workflows. The only notable gap is the ambiguity between the 'No pagination' statement and the fetchAllPages parameter, which an agent would need to reconcile before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear enum/default/description for every parameter, so the baseline of 3 applies. The description reinforces action=list and lists key response fields, but it adds little parameter-specific meaning beyond the schema. The 'No pagination' note also mildly conflicts with the fetchAllPages parameter, preventing a higher score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Query available ThreatLocker agent versions,' a clear verb and resource, and then specifies what is returned: enabled versions, default version, and release dates. It also references related tools and workflows, helping distinguish it from siblings like computers and computer_groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Common workflows' section gives concrete scenarios with action=list, such as finding the latest version, checking availability, and identifying defaults. It also points to related tools like computers for installed versions and scheduled_actions for updates, though it stops short of explicit 'use X instead' exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv1.3.1
    • First observedaction_log
    • First observedapplications
    • First observedapproval_requests
    • First observedcomputer_groups
    • First observedcomputers
    • First observedmaintenance_mode
    • First observednetwork_access_policies
    • First observedonline_devices
    • First observedorganizations
    • First observedpolicies
    • First observedreports
    • First observedsaved_searches
    • First observedscheduled_actions
    • First observedstorage_policies
    • First observedsystem_audit
    • First observedtags
    • First observedupload_requests
    • First observedversions

TDQS

A4.3/5.0

Scored across 18 tools

Disambiguation5/5

Each tool maps to a distinct ThreatLocker domain—computers, groups, applications, policies, logs, approvals, organizations, reports, maintenance, scheduling, tags, storage/network policies, versions, online devices, saved searches, and upload requests. Potential overlaps like system_audit vs action_log and policies vs storage_policies/network_access_policies are clearly differentiated by both naming and description.

Naming Consistency5/5

All tools follow the same snake_case resource-noun pattern: computers, computer_groups, applications, policies, action_log, maintenance_mode, storage_policies, etc. While actions are passed via an 'action' parameter rather than verb-prefixed tool names, the convention is uniform and easy to predict.

Tool Count4/5

18 tools is above the ideal 3-15 range, but the count is justified by the breadth of the ThreatLocker platform—each tool covers a distinct functional area. It feels slightly heavy rather than bloated, and there are no redundant tools that could be merged.

Completeness3/5

Core lifecycle coverage is strong for applications and policies (create/update/delete/deploy), and there are solid querying tools for logs, approvals, and computers. However, several areas are read-only or lack management operations: computer_groups cannot be created/edited/deleted, storage_policies and network_access_policies are read-only, maintenance_mode is history-only, and scheduled_actions cannot be created or cancelled.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for ThreatLocker — zero-trust application allowlisting, approval requests, audit logs
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for the Delinea Secret Server and Platform APIs, enabling AI agents to manage secrets, users, groups, folders, roles, and access requests through natural language commands.
    46
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that enables AI-powered assessment of Active Directory on-premises environments by exposing AD data as queryable tools for LLMs like Claude.
    MIT
  • A
    license
    C
    quality
    C
    maintenance
    An MCP server that connects AI assistants to the ThreatLocker Portal API with 44 tools for managing computers, approvals, action logs, tags, maintenance mode, and more across single-org and multi-tenant setups.
    44
    1
    MIT