Skip to main content
Glama
BeardedInfoSec

Picus Security MCP Server

Picus Security MCP Server

Drive the Picus Breach & Attack Simulation platform from Claude — and any MCP client.

License: MIT Python 3.10+ MCP Picus API

29 tools · 8 Picus API groups · 23 read-only + 6 write (opt-in)

A Model Context Protocol server that exposes the Picus Security Breach & Attack Simulation (BAS) REST API as tools any MCP-compatible client — Claude Code, Claude Desktop, and others — can call.

Ask your assistant to "list failed Picus simulations", "show the latest run results for the DMZ agent", or "search the threat library for ransomware threats affecting Windows" — and it drives the Picus API for you.

How it works

You provide a long-lived refresh token; the server exchanges it for a short-lived access token, caches it, and refreshes it automatically — so tool calls never deal with auth.


Related MCP server: AccuKnox MCP Server

Features

  • All eight Picus API groups — simulations, run results & analytics, threat library, threat templates, agents, integrations, and vendor mitigations.

  • 23 read-only tools always available; 6 write tools (create/update/ delete/cancel/simulate-now, create template) gated behind an explicit opt-in so an assistant can't launch or destroy a simulation by accident.

  • Automatic auth — you provide a long-lived refresh token; the server handles the access-token exchange, caching, and refresh (including retry on a 401).

  • Portable — speaks MCP over stdio and reads all config from the environment, so it works with any MCP host and isn't tied to one machine.

  • Handles the API's quirks — mixed /v1 and /v2 paths, inconsistent pagination envelopes, and epoch-millisecond timestamps. Responses are returned raw so nothing is lost in translation.


Prerequisites

  • Python 3.10 or newer

  • A Picus Security account with REST API access


Getting a Picus API token

  1. Sign in to the Picus dashboard and go to Settings → REST API Token.

  2. Click Generate Token. Choose a name, description, expiration (up to 6 months), and the scopes you need.

  3. Copy the token immediately — Picus shows it only once.

This is your refresh token (PICUS_REFRESH_TOKEN). The server exchanges it for short-lived access tokens automatically.


Install

git clone https://github.com/BeardedInfoSec/picus-security-mcp.git
cd picus-security-mcp

python3 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -e .

Configure

Copy the example env file and paste in your token:

cp .env.example .env
# .env
PICUS_API_BASE="https://api.picussecurity.com/v1"
PICUS_REFRESH_TOKEN="paste-your-refresh-token-here"

.env is gitignored — your token never gets committed. The server auto-loads .env from the working directory (real environment variables take precedence, so a host that injects config still wins).

Variable

Required

Default

Purpose

PICUS_REFRESH_TOKEN

yes

Picus REST API refresh token

PICUS_API_BASE

no

https://api.picussecurity.com/v1

API base; the host origin is derived from it (both /v1 and /v2 endpoints are used)

PICUS_ENABLE_WRITE_TOOLS

no

false

Register the mutating tools when true

PICUS_REQUEST_TIMEOUT

no

30

Per-request timeout (seconds)

PICUS_TOKEN_LEEWAY_SECONDS

no

120

Refresh the access token this many seconds before it expires


Verify it works

A smoke test builds the server, authenticates, and makes a couple of live calls:

python scripts/smoke_test.py

Expected output ends with your real agent and simulation counts, e.g.:

auth OK — access token acquired (len=185)
GET /v1/agents ...
  agents returned: 42 -> ['Browser Agent', 'DMZ-client', ...]

Use with Claude Code

Copy the example config and set the command path to your clone location, then restart Claude Code (or run /mcp):

cp .mcp.json.example .mcp.json

# prints the exact absolute path to paste as "command" — no guessing:
echo "$(pwd)/.venv/bin/picus-mcp"

.mcp.json is gitignored (it holds a machine-specific absolute path); the tracked .mcp.json.example is the template:

{
  "mcpServers": {
    "picus": {
      "command": "/absolute/path/to/picus-security-mcp/.venv/bin/picus-mcp",
      "env": { "PICUS_ENABLE_WRITE_TOOLS": "false" }
    }
  }
}

No token in this file — the server reads it from .env. Once connected, ask Claude to "list my Picus simulations" to confirm the end-to-end path.

Use with Claude Desktop

Add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "picus": {
      "command": "/absolute/path/to/picus-security-mcp/.venv/bin/picus-mcp",
      "env": {
        "PICUS_REFRESH_TOKEN": "paste-your-refresh-token-here"
      }
    }
  }
}

Claude Desktop doesn't run from your project directory, so pass the token in the env block (or export it in the launching environment).

Use with any other MCP client

Run the server directly; it speaks MCP over stdio:

export PICUS_REFRESH_TOKEN="…"     # or rely on .env
picus-mcp

Response format

Every tool returns its result twice:

  • a text block — markdown tables for list endpoints, an indented tree for everything else, with epoch-millisecond timestamps decoded inline;

  • structuredContent — the untouched API payload, exactly as Picus returned it.

The text is what a model or a human reads, and it is a summary: long prose is truncated and rows are reordered (dead agents last, and so on). Anything it leaves out is still in structuredContent, so nothing is lost. On a typical call the text runs ~65% smaller than the raw JSON dump it replaces.

Formatting lives in src/picus_mcp/format.py. The high-volume list endpoints have hand-written formatters; everything else uses a generic renderer that walks arbitrary JSON without dropping fields, so an undocumented or newly-added API shape still renders readably. A formatter that raises falls back to that generic renderer rather than failing the call.


Enabling write tools

Write tools are off by default because they can start or delete real simulations against your infrastructure. To enable them, set PICUS_ENABLE_WRITE_TOOLS=true (in .mcp.json, the client env block, or your shell). This adds:

Tool

Endpoint

picus_create_simulation

POST /v1/simulations

picus_update_simulation

PUT /v1/simulations/{id}

picus_delete_simulation

DELETE /v1/simulations/{id}

picus_cancel_simulation

PUT /v1/simulations/{id}/cancel

picus_simulate_now

POST /v1/simulations/{id}/simulate-now

picus_create_template

POST /v1/templates


Tools reference (read-only)

Tool

Endpoint

picus_list_simulations

GET /v1/simulations

picus_get_simulation

GET /v1/simulations/{id}

picus_get_run_result

GET /v1/simulations/{id}/run/{runId}

picus_get_latest_run_result

GET /v1/simulations/{id}/run/latest

picus_get_run_threats

GET /v1/simulations/{id}/run/{runId}/threats

picus_get_action_alerts

GET …/run/latest/threats/{t}/actions/{a}/integrations/{i}/alerts

picus_get_run_frameworks

GET /v1/simulations/{id}/run/{runId}/frameworks

picus_get_latest_run_frameworks

GET /v1/simulations/{id}/run/latest/frameworks

picus_search_threats

GET /v1/threat-library/threats

picus_get_threat

GET /v1/threat-library/threats/{id}

picus_get_threat_action

GET /v1/threat-library/actions/{id}

picus_list_threat_actions

GET /v2/threat-library/actions

picus_list_threat_actors

GET /v1/threat-library/threat-actors

picus_list_templates

GET /v1/templates

picus_get_template

GET /v1/templates/{id}

picus_list_agents

GET /v1/agents

picus_get_agent

GET /v1/agents/{id}

picus_list_integrations

GET /v1/integrations

picus_list_integration_agents

GET /v1/integrations/agents

picus_list_mitigation_devices

GET /v2/mitigation/devices

picus_get_mitigation_device_stats

GET /v2/mitigation/devices/{id}

picus_get_device_signatures

GET /v1/mitigation/devices/{id}/signatures

picus_list_not_blocked_actions

GET /v1/mitigation/generic/not-blocked-actions


Project layout

src/picus_mcp/
  config.py        # env-based configuration + .env auto-loading
  client.py        # async HTTP client: token exchange, caching, retry, v1/v2 routing
  server.py        # builds the FastMCP server and registers tool groups
  tools/           # one module per Picus API group
scripts/
  smoke_test.py    # live end-to-end check
PICUS_API.md       # auth flow + manual curl reference

Troubleshooting

  • configuration error: PICUS_REFRESH_TOKEN is not set — create .env from .env.example and paste your token, or export the variable.

  • Failed to obtain access token … refresh token may be expired — the refresh token expired or was revoked; generate a new one in the dashboard.

  • Tools don't appear in Claude Code — MCP servers load at startup; restart Claude Code or run /mcp. Check the command path in .mcp.json is absolute and points at your .venv.

  • Timestamps look wrong — most Picus fields are epoch milliseconds (a few threat-library fields are seconds). Values are returned raw; convert as needed.


Notes on the Picus API

  • List endpoints paginate with limit/offset. Most wrap results in a pages object with total_count; picus_list_not_blocked_actions uses pagination instead, and a few list endpoints return a bare array.

  • The API mixes /v1 and /v2 paths, which is why the client is anchored at the host origin and each tool carries its full versioned path.

See PICUS_API.md for the auth flow and a manual curl example.

License

MIT — see LICENSE.


An independent, community-built integration. Not affiliated with, endorsed by, or sponsored by Picus Security. "Picus" and the Picus logo are trademarks of Picus Security, used here only to identify the API this project targets.

Available Tools

23 tools
picus_get_action_alertsA

List alerts raised by a SIEM/EDR integration for one action (latest run).

Path is scoped to the latest run. Returns alerts with name, source, log_type, and time (epoch milliseconds). Paginated via limit (default 100, max 1000) and offset. node_id disambiguates an action used multiple times within a threat; if omitted, the first node is used. Alerts only appear when the simulation is enriched with an integration that has alert analysis enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
node_idNo
action_idYes
threat_idYes
simulation_idYes
integration_idYes

TDQS

A4.1/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses pagination (limit, offset, max 1000), node_id disambiguation, and the condition that alerts only appear with enriched integration having alert analysis enabled. This is comprehensive behavioral context.

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 5 sentences, front-loads the purpose, and avoids unnecessary words. It is concise but could be more structured (e.g., bullet points for return fields or parameters).

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

Completeness3/5

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

Given 7 parameters, 4 required, no output schema, and no annotations, the description covers basic behavior and a condition but omits explanations for required IDs and return format details beyond field names. It is adequate but not fully complete.

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

Parameters2/5

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

Schema coverage is 0%, so the description must explain parameters. It describes limit, offset, and node_id, but the four required parameters (simulation_id, threat_id, action_id, integration_id) are not explained. This leaves significant gaps for an agent to correctly invoke the 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 clearly states it lists alerts for a specific action, scoped to the latest run, and specifies return fields (name, source, log_type, time). This distinguishes it from sibling tools that deal with agents, devices, frameworks, etc.

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 implies usage when you need alerts for a specific action from an integration, and notes it is scoped to the latest run. However, it does not explicitly state when not to use this tool or provide alternatives, though the context is clear.

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

picus_get_agentA

Get detailed configuration for one simulation agent by id.

Includes IP/NAT IP, whether an update is needed, and the attack modules enabled for the agent. created_at is epoch milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses included fields (IP, NAT IP, update needed, attack modules, created_at) and format (epoch ms), but does not mention read-only nature or potential side effects. Adequate but not rich.

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 concise, using two sentences. The first sentence front-loads the core purpose, and the second adds useful detail. No unnecessary words.

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 simple single-agent retrieval tool with one parameter and no output schema, the description covers the tool's purpose and return fields. It lacks error conditions or permissions, but is largely complete for its complexity.

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

Parameters2/5

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

With 0% schema description coverage, the description must add meaning. It says 'by id' which matches the parameter name, but does not elaborate on format, constraints, or that it's required (already in schema). Minimal added value.

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 states the tool retrieves detailed configuration for a single agent by ID, using a specific verb ('Get') and resource ('agent'). It distinguishes from sibling tools that list agents or get other resources.

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

Usage Guidelines3/5

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

The description indicates it is used with an agent ID, but does not explicitly state when to use vs. alternatives like picus_list_agents or provide usage exclusions. The guidance is implied but not explicit.

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

picus_get_device_signaturesA

Get vendor prevention signature suggestions for a device and actions.

action_ids is REQUIRED (max 10 ids). Returns signatures with signature_id, name, vendor_severity, product_platform/version, etc. — the vendor signatures that mitigate the given actions on this device.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes
action_idsYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It mentions the output fields ('signature_id, name, vendor_severity, product_platform/version, etc.') and the relationship ('mitigate the given actions'). However, it does not disclose read-only nature, authentication needs, or any side effects, leaving gaps.

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 brief (two sentences) and front-loaded: first sentence states core purpose, second adds constraints and output fields. Every word adds value, though it could be slightly more structured.

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?

Given the tool has 2 parameters, no output schema, and no annotations, the description covers the key purpose, a critical constraint (max 10 action IDs), and the output structure. It is largely complete for a simple lookup tool, though it could include a usage example.

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 0%, so the description must compensate. It adds meaning to 'action_ids' by specifying it is required and limited to 10 ids, which is not in the schema. However, 'device_id' is not described beyond its schema title, missing an opportunity to explain its role.

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 states the verb ('Get'), resource ('vendor prevention signature suggestions'), and scope ('for a device and actions'). It distinguishes from sibling tools like picus_get_action_alerts or picus_get_threat by specifying that it returns signatures that mitigate given actions.

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

Usage Guidelines3/5

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

The description states that 'action_ids is REQUIRED (max 10 ids)', providing an explicit constraint. However, it does not explicitly mention when to use this tool versus alternatives, nor does it provide prerequisites or conditions. Usage is implied but not fully guided.

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

picus_get_latest_run_frameworksB

Get the latest run's MITRE ATT&CK / Unified Kill Chain framework mapping.

Same as picus_get_run_frameworks but for the most recent run. Raw API payload is returned as-is.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulation_idYes

TDQS

B3.4/5.0
Behavior2/5

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

Mentions raw API payload is returned as-is, providing some behavioral insight. No annotations exist, so description carries full burden; missing details on authentication, rate limits, side effects, or error conditions.

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?

Two sentences, front-loaded with purpose, no fluff. Every sentence adds value: purpose first, then sibling comparison and behavioral note.

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

Completeness3/5

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

Adequate for a simple tool with one parameter, but lacks output schema description (only says 'raw payload'). No context on prerequisites or error states. References sibling but does not fully explain workflow.

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

Parameters1/5

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

Description adds no meaning beyond the schema for the sole parameter 'simulation_id'. With 0% schema description coverage, the description should compensate but does not explain the parameter's role or how to obtain 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?

Clearly states it retrieves the latest run's MITRE ATT&CK / Unified Kill Chain framework mapping. Distinguishes from sibling 'picus_get_run_frameworks' by specifying it is for the most recent run.

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?

Explicitly compares to sibling tool, indicating that this is the variant for the latest run. Provides context for when to use this tool, but lacks explicit when-not conditions or alternative usage scenarios.

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

picus_get_latest_run_resultA

Get prevention + detection results for a simulation's most recent run.

Same shape as picus_get_run_result. Convenient when you don't have a specific run id.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulation_idYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It mentions that the tool returns results and has the same shape as another tool, which gives some behavioral context. However, it does not explicitly state that it is a read-only operation, nor does it discuss potential errors, authentication, or other side effects. The transparency is adequate but not thorough.

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 consists of two short sentences. The first states the purpose, and the second provides comparison and use case. Every word serves a purpose with no redundancy or unnecessary detail.

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?

Given the tool's simplicity (one parameter, no output schema), the description is mostly complete. It explains the tool's purpose, compares it to a sibling, and gives a usage hint. It could have briefly mentioned what the result structure looks like, but the reference to 'same shape as picus_get_run_result' provides some context if the agent is familiar with that tool.

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

Parameters2/5

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

The schema has one required parameter 'simulation_id' with no description in the schema itself (0% coverage). The tool description does not add any information about what this parameter means or how to obtain it. While the parameter name and title are somewhat self-explanatory, the description misses an opportunity to provide necessary context.

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 states that the tool retrieves prevention and detection results for the most recent run of a simulation. It also distinguishes itself from the sibling tool 'picus_get_run_result' by noting they have the same shape and by providing a use case for when to choose this one over the other.

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 explicitly states when to use the tool: 'Convenient when you don't have a specific run id.' It also implicitly compares it to 'picus_get_run_result' by saying it has the same shape, giving the agent a clear alternative. It does not explicitly state when not to use it, but the context is clear enough.

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

picus_get_mitigation_device_statsA

Get effectiveness stats for one mitigation device.

Returns blocked_count, not_blocked_count, total_count, and an effectiveness score. Served under /v2.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

TDQS

A3.7/5.0
Behavior4/5

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

In the absence of annotations, the description discloses the returned fields (blocked_count, not_blocked_count, total_count, score) and the API endpoint (/v2), adding behavioral context beyond the schema.

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 extremely concise, using only three lines to convey purpose, return structure, and endpoint. Every sentence is valuable and front-loaded.

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?

Given the simple structure (one required param, no output schema), the description provides adequate context about the output and endpoint, though it lacks usage guidance and parameter explanation.

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

Parameters2/5

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

With 0% schema description coverage, the description does not explain the device_id parameter. Although the name hints at an ID, the tool would benefit from specifying what device_id refers to or how to obtain 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?

The description clearly states the verb 'Get' and resource 'effectiveness stats for one mitigation device', distinguishing it from sibling tools like picus_get_device_signatures which return different data.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives such as picus_list_mitigation_devices or picus_get_device_signatures. The description only states what it does, not the context for use.

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

picus_get_run_frameworksB

Get a run's results mapped to MITRE ATT&CK and Unified Kill Chain.

Returns the framework-mapped prevention/detection view for the given run. (The exact response schema is not published in the Picus static docs; the raw API payload is returned as-is.)

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
simulation_idYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations; description mentions raw API payload returned as-is, but doesn't confirm read-only nature or other behaviors.

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?

Short and front-loaded, efficiently stating purpose and response format, but lacks parameter details.

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

Completeness3/5

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

Explains raw response due to no output schema, but omits parameter context and sibling differentiation.

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

Parameters2/5

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

Schema coverage 0%; description adds no meaning to run_id and simulation_id beyond their titles.

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?

Clearly states it gets run results mapped to MITRE ATT&CK and Unified Kill Chain, distinguishing from siblings like picus_get_run_result.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this vs alternatives like picus_get_latest_run_frameworks or picus_get_run_result.

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

picus_get_run_resultA

Get prevention + detection results for a specific simulation run.

Returns security scores plus threat counts (blocked/not_blocked/ not_tested) and attacker-objective counts. Note the API spells two fields achived_count / unachived_count (sic) — they are returned verbatim. The results block is populated only once the run is completed or stopped; detection_analysis appears only when has_detection_analysis is true. Timestamps are epoch milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
simulation_idYes

TDQS

A4.1/5.0
Behavior5/5

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

Since no annotations are provided, the description carries full behavioral disclosure. It reveals API quirks (misspelled field names), conditional population of certain blocks (results only on completion/stop, detection_analysis only when flag is true), and timestamp format (epoch ms). This exceeds minimal expectations.

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 a single, well-structured paragraph with front-loaded purpose. Every sentence adds essential information (outputs, quirks, conditions). No wasted words or redundancy.

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?

Given simple integer parameters and no output schema, the description covers primary aspects: output items, conditional fields, and API peculiarities. It lacks a structured return format overview but is sufficient for an AI agent to understand what to expect. The score reflects slight room for improvement (e.g., listing all fields retuned).

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

Parameters2/5

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

With 0% schema description coverage, the description should add meaning beyond parameter names. It only mentions 'specific simulation run' but does not explain the role of run_id and simulation_id (e.g., that they together identify a run). The schema already provides titles 'Run Id' and 'Simulation Id', so the description adds negligible value.

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 states the action ('Get') and specific resource ('prevention + detection results for a specific simulation run'). It mentions key outputs (security scores, threat counts, attacker-objective counts) and distinguishes from siblings like picus_get_latest_run_result and other get tools that focus on different aspects.

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

Usage Guidelines3/5

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

The description implies usage by requiring simulation_id and run_id for a specific run, but it does not explicitly state when to use this tool versus alternatives (e.g., picus_get_latest_run_result). No guidance on prerequisites or exclusions is provided.

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

picus_get_run_threatsA

List a run's results broken down by threat -> objective -> action.

Each threat and action carries a prevention status (e.g. blocked / unblocked / achieved) and detection analysis (log_result / alert_result per integration). Paginated via limit (default 10, max 50) and offset; response includes a pages object with total_count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
run_idYes
simulation_idYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided; description carries full burden. It discloses that the tool returns threats with prevention status and detection analysis (log_result/alert_result), and mentions pagination behavior. It does not explicitly state read-only or auth needs, but the read-only nature is reasonable and no contradictions.

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?

Three sentences, front-loaded with purpose, no redundant information. Each sentence adds value: purpose, result structure, pagination details. Efficient and well-structured.

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?

Given the tool's moderate complexity (hierarchical output, pagination), the description covers purpose, behavior, and parameter details adequately. No output schema, but return structure is described. Enough for an agent to use correctly without needing additional 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?

Schema has 0% description coverage; description compensates by explaining limit and offset: 'Paginated via limit (default 10, max 50) and offset; response includes a pages object with total_count.' It adds max 50 constraint not in schema. Does not elaborate on simulation_id or run_id, but those are clear from name.

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 states 'List a run's results broken down by threat -> objective -> action.' It specifies verb and resource, and the hierarchical breakdown distinguishes it from sibling tools like picus_get_run_result which likely lists runs at a higher level.

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

Usage Guidelines3/5

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

The description provides context (paginated with limit/offset) but lacks explicit when-to-use/not-use guidance or alternatives among the many sibling tools. The usage is implied for getting detailed threat-level results of a run.

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

picus_get_simulationA

Get full detail for one simulation, including its run list.

The simulation_run array lists runs with their string ids; use a run id with picus_get_run_result to fetch that run's prevention/detection results. Timestamps are epoch milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
simulation_idYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, description must carry behavioral disclosure. It mentions timestamps format and the relation to other tools, but does not disclose read-only nature, potential side effects, or authentication needs.

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?

Description is very concise, front-loaded with the core purpose, and every sentence adds value. No wasted words.

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?

Given no output schema and simple parameter set, the description covers the key response aspects (run list, timestamps) and usage flow. Could list more response fields, but adequate for the tool's simplicity.

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

Parameters2/5

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

Only one parameter (simulation_id) with 0% schema coverage. Description adds minimal meaning beyond the name, just implying it's an identifier. No constraints or format details given.

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?

Clearly states the tool gets full detail for one simulation including run list. The verb 'get' and resource 'simulation detail' are specific. Distinct from sibling tools like picus_get_run_result and picus_list_simulations.

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?

Explains how to use the run list with picus_get_run_result and timestamp format. Provides clear context for chaining, but does not explicitly state when to use this tool vs alternatives like picus_get_template.

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

picus_get_templateA

Get full detail for one threat template.

Static templates return their threats list; dynamic templates also return a rules array describing the filter criteria. content_updated_at is 0 for static templates and epoch ms for dynamic ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYes

TDQS

A3.7/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses behavioral differences between static and dynamic templates regarding return fields (threats vs rules) and content_updated_at format. No side effects mentioned, but appropriate for a read operation.

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 concise (4 sentences) and front-loaded with the purpose. Every sentence adds value without unnecessary detail.

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 low complexity (1 param, no output schema/no annotations), the description adequately explains the return value differences. Could mention it's a read operation, but overall complete for the tool's simplicity.

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

Parameters1/5

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

Schema description coverage is 0%, but the description adds no information about the single required parameter (template_id) such as its format, usage, or how to obtain it. This is a significant gap.

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 states the tool retrieves full details for one threat template, using a specific verb ('get') and resource. It distinguishes from sibling tools like picus_list_templates (list) and picus_get_threat (threat vs template).

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

Usage Guidelines3/5

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

No explicit when or when-not guidance or alternatives mentioned. The description implies usage when full detail is needed, but lacks context about when to choose this over related tools.

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

picus_get_threatA

Get full detail for a single threat from the Threat Library.

Includes description, severity, affected OS/products, applicable agent types, threat actors, framework mappings (MITRE ATT&CK / Unified Kill Chain), and the objective -> action flows.

ParametersJSON Schema
NameRequiredDescriptionDefault
threat_idYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided; description lists included return fields (description, severity, etc.) but omits behavioral traits such as idempotency, authentication, or rate limits.

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?

Two efficient sentences with front-loaded purpose and no extraneous content.

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?

Description thoroughly explains return content for a single-parameter retrieval tool, though it omits error handling or potential edge cases.

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

Parameters2/5

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

Schema coverage is 0%; description does not clarify the 'threat_id' parameter beyond its type and requirement, failing to add meaningful context.

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 action ('Get') and resource ('full detail for a single threat'), distinguishing it from sibling tools like picus_search_threats and picus_list_threat_actions.

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

Usage Guidelines3/5

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

Description implies usage for retrieving a specific threat's details but lacks explicit guidance on when to use this tool versus alternatives like search or list endpoints.

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

picus_get_threat_actionA

Get full detail for a single action from the Threat Library.

Includes affected platforms, attack category/module, framework mappings (frameworks.mitre / frameworks.ukc), module-based process details, and keyword queries. created_at/updated_at/release_date are epoch milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
action_idYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the response includes affected platforms, attack category/module, framework mappings (MITRE/UKC), process details, keyword queries, and epoch timestamps. This adds significant behavioral context beyond a simple 'get detail' statement, though it does not explicitly state that it is a read-only operation.

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 two sentences. The first sentence clearly states the purpose. The second sentence lists the key data points included. There is no extraneous information, and every sentence adds value. It is front-loaded and efficient.

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 that there is no output schema, the description does an excellent job of outlining what the agent can expect: platforms, attack category/module, framework mappings, process details, keyword queries, and timestamps. This covers the essential information for a detail retrieval endpoint. No critical gaps are apparent.

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?

There is only one parameter (action_id) with no description in the schema (0% coverage). The tool description does not elaborate on the parameter's meaning beyond what is implied by the name and context. Since it is a simple integer and the purpose is clear, the description provides minimal additional value for parameter understanding. A score of 3 reflects that the parameter is self-evident but not enhanced by the description.

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 states 'Get full detail for a single action from the Threat Library.' It specifies the verb (get) and the resource (full detail for a single action). This distinguishes it from sibling tools like picus_list_threat_actions (list) and picus_get_threat (get a threat, not an action).

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?

While no explicit when-to-use or exclusion statements are given, the purpose implies it is for retrieving detailed information about a specific action. The agent can infer from the name and description that this is for detail retrieval, and sibling tools like list variants serve different purposes. The lack of explicit alternatives prevents a higher score.

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

picus_list_agentsA

List all Picus simulation agents (peers).

Returns each agent's id, name, status (alive/dead), type, version, platform, and created_at (epoch milliseconds). Use an agent id with picus_get_agent for full detail, or when creating a simulation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that the tool returns id, name, status, type, version, platform, and created_at. It adequately describes the read-only, list behavior, though it could mention pagination or performance constraints.

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?

Two short paragraphs with front-loaded purpose. Every sentence adds value: the first states purpose and return fields, the second gives usage advice. No wasted words.

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 no parameters and no output schema, the description is complete. It lists all returned fields and provides integration context with other tools. No gaps.

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?

No parameters in input schema; description doesn't need to add parameter info. Baseline for 0 parameters is 4.

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 states the tool's purpose: 'List all Picus simulation agents (peers).' It specifies the verb (list) and resource (agents), and distinguishes from sibling tools by focusing on agent listing with return field details.

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?

Explicit guidance is provided: 'Use an agent id with picus_get_agent for full detail, or when creating a simulation.' This directly tells the agent when to use this list tool versus the alternative detail tool.

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

picus_list_integration_agentsA

List integration agents (the collectors that connect Picus to SIEM/EDR).

Reports id, name, status (Alive/Dead), whether installed, and whether the agent token has expired. Timestamps are epoch milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It clearly states it is a list (read-only) operation with no mention of side effects, which is transparent for a simple retrieval tool. No further behavioral detail is needed.

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 two efficient sentences, front-loading the purpose and then listing key fields. No redundant 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 no input parameters, no output schema, and the simple nature of the tool, the description adequately covers what the tool does and returns. It is complete for an agent to invoke it 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 tool has zero parameters, so the description does not need to add parameter semantics. The baseline for zero parameters is 4, and the description adds value by clarifying the returned fields.

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 states the tool lists integration agents (collectors connecting Picus to SIEM/EDR) and specifies the exact fields returned (id, name, status, installed, token expired, epoch timestamps), making it distinct from sibling tools like picus_list_agents and picus_list_integrations.

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

Usage Guidelines3/5

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

The description implies the tool should be used to list integration agents but does not provide explicit guidance on when to use it versus alternatives or any context such as prerequisites or exclusions.

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

picus_list_integrationsA

List SIEM/EDR integrations with health status.

Each integration reports id, name, type (SIEM/EDR), health_status (healthy flag plus an error object when unhealthy), and the connected integration agent. Timestamps are epoch milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The description reveals the output fields and that timestamps are epoch milliseconds, but with no annotations, it fails to disclose potential behaviors such as pagination, limits, authentication requirements, or mutability, leaving gaps for an agent.

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 concise (4 sentences), front-loaded with the core purpose, and every sentence adds value by detailing the output structure without redundancy.

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?

Given the tool's simplicity (no params, no output schema), the description adequately covers the main return fields and health_status nuance, though it omits potential meta-info like ordering or pagination.

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 zero parameters and 100% schema coverage, the baseline is 4. The description adds no parameter semantics but none are needed; the output details are sufficient context.

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 states the verb ('List'), resource ('SIEM/EDR integrations'), and scope ('with health status'), effectively distinguishing it from sibling tools like picus_list_agents and picus_list_integration_agents.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The description does not mention exclusions, prerequisites, or when another tool like picus_search_threats might be preferred.

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

picus_list_mitigation_devicesA

List vendor-based mitigation devices (device_id, device_name).

Served under /v2. Use a device_id with picus_get_mitigation_device_stats or picus_get_device_signatures.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided. The description does not disclose any behavioral traits such as side effects, rate limits, or authorization requirements. It implies a safe read operation but doesn't explicitly state it.

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?

Two concise sentences, no redundant information. Front-loaded with the verb and resource.

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?

Adequate for a parameterless list tool with no output schema. Mentions key return fields. Could be improved by noting pagination or scope, but not critical.

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?

No parameters exist, and schema coverage is 100%. The description adds value by specifying the output fields (device_id, device_name), which helps the agent understand what to expect.

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?

Clearly states it lists vendor-based mitigation devices and returns device_id and device_name. The sibling tools are mostly 'get' or 'list' for different entities, so the resource type is specific and distinguishable.

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

Usage Guidelines3/5

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

Provides guidance to use the returned device_id with picus_get_mitigation_device_stats or picus_get_device_signatures. However, it does not specify when to use this tool vs other list tools, nor any exclusions.

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

picus_list_not_blocked_actionsA

List not-blocked actions with generic mitigation suggestions.

Returns each not-blocked action with its associated signature_names and signature_descriptions (generic, non-device-specific recommendations). Filters: threat_or_action_name (substring), threat_ids, threat_severities, attack_modules, assessment_id_list, is_all_assessments, run_id. Paginated via limit/offset; response includes a pagination object with total_count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
run_idNo
threat_idsNo
attack_modulesNo
threat_severitiesNo
assessment_id_listNo
is_all_assessmentsNo
threat_or_action_nameNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description fully discloses the return structure: each action includes signature_names and signature_descriptions (generic recommendations). It also mentions pagination with a pagination object containing total_count. It does not mention any side effects, but as a read-only list, this is sufficient.

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 concise, using 5 lines to cover purpose, return details, filters, and pagination. It front-loads the most important information and avoids unnecessary elaboration. Every sentence adds value.

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?

Given the complexity (9 parameters, no output schema, no annotations), the description covers the main aspects: return structure, filters, and pagination. However, it lacks explicit details on the exact response fields beyond signature_names and signature_descriptions, and the meaning of each filter could be more thorough. Still, it is largely adequate for an agent to use the tool correctly.

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 0%, so the description is the sole source of parameter meaning. It enumerates the filters (threat_or_action_name, threat_ids, threat_severities, attack_modules, assessment_id_list, is_all_assessments, run_id) and mentions limit/offset for pagination. However, it does not explain the values or behavior of filters like attack_modules or assessment_id_list, leaving some ambiguity.

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 states that the tool lists not-blocked actions with generic mitigation suggestions, and specifies the returned fields (signature_names, signature_descriptions). It uses a specific verb and resource, and distinguishes itself from sibling list tools through the 'not-blocked' qualifier.

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

Usage Guidelines3/5

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

The description lists available filters but provides no explicit guidance on when to use this tool versus alternatives like picus_list_threat_actions or picus_get_threat_action. There is no mention of prerequisites or when not to use it; usage context is only implied through the filter descriptions.

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

picus_list_simulationsA

List simulations with overview data and latest prevention/detection scores.

Paginated via limit (default 25, max 50) and offset. Filters:

  • status: any of RUNNING, STOPPED, COMPLETED, SCHEDULED, "NOT STARTED", "WAITING FOR THE FIRST RUN", FAILED (substring/exact match per API).

  • simulation_name / agent_name / template_name: substring match.

  • agent_id / template_id: exact id match.

  • prevention_result_/detection_result_ gte/lte: score bounds (0-100).

Response includes a pages object with total_count. Scores are 0-100; updated_at is epoch milliseconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
statusNo
agent_idNo
agent_nameNo
template_idNo
template_nameNo
simulation_nameNo
detection_result_gteNo
detection_result_lteNo
prevention_result_gteNo
prevention_result_lteNo

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, but the description explains response structure (pages object, scores 0-100, updated_at as epoch ms) and filter behaviors (substring/exact match). It could explicitly state that the operation is read-only, but overall it sufficiently discloses the tool's 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?

The description is concise, well-structured with bullet points for filters, and front-loaded with the main purpose. Every sentence adds value without redundancy.

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?

No output schema, but the description covers response details (pages, scores, timestamps) and pagination. For a list tool with 12 parameters, it is fairly complete, though the exact fields of a simulation object are not specified.

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?

Despite 0% schema description coverage, the description thoroughly explains all 12 parameters, including pagination (limit, offset) and filters (status, names, IDs, score ranges). This adds significant meaning beyond the schema itself.

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 states 'List simulations with overview data and latest prevention/detection scores.' It specifies the resource (simulations) and what data is returned, distinguishing it from sibling tools like picus_get_simulation which retrieves a single simulation.

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 detailed filtering and pagination options, guiding when to use this tool for listing simulations with scores. However, it does not explicitly mention alternative tools for specific cases, though the sibling list allows inference.

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

picus_list_templatesA

List threat templates (dynamic and static).

Filters: category_name (e.g. "My Templates", "Emerging Threats", "Suggested by Picus Labs") and content_type ("dynamic" for rule-based or "static" for threat-list-based). Paginated via limit/offset. Each template reports threat_count, agent_types, and content_updated_at (epoch ms).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
content_typeNo
category_nameNo

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses pagination via limit/offset, and that returned data includes threat_count, agent_types, and content_updated_at. However, does not mention read-only nature or any effects.

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?

Two sentences, front-loaded with purpose, followed by filter details and output fields. Every sentence is informative and no wasted words.

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 0% schema coverage, no output schema, and no annotations, the description covers the tool's purpose, all parameters, filtering behavior, pagination, and output fields. Highly complete for a listing tool.

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 0%, so description compensates by explaining each parameter: category_name with examples, content_type with allowed values, and limit/offset for pagination. Provides meaningful guidance beyond 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?

Clearly states the verb 'List' and resource 'threat templates', and distinguishes between dynamic and static templates. The description also mentions filters, making the purpose specific and differentiating from sibling tools like 'picus_get_template'.

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

Usage Guidelines3/5

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

Implies when to use (when listing templates) but does not explicitly state when not to use or mention alternative tools, such as 'picus_get_template' for a single template. No exclusions or context explained.

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

picus_list_threat_actionsA

List Threat Library actions with light metadata (id, name, updated_at).

NOTE: this endpoint is served under /v2. Paginated via limit (default 100, max 100) and offset; filter by updated_at_gte/lte (epoch). Response includes a pages object with total_count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
updated_at_gteNo
updated_at_lteNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description bears full burden. It discloses the API version (/v2), pagination behavior, maximum limit, filter parameters, and response structure (pages object with total_count). This is comprehensive for a list tool, though it could mention idempotency or read-only nature explicitly.

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 exceptionally concise: two sentences covering purpose, pagination, filtering, and response. Every sentence adds necessary information, and the first sentence immediately states the tool's core function. No extraneous text.

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 list tool with no output schema and 4 parameters, the description sufficiently explains input (limit, offset, filters) and output (pages object with total_count). It could be more explicit about the shape of each action object beyond id/name/updated_at, but the first sentence covers that. Overall adequate.

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?

Although the schema has no descriptions (0% coverage), the description enriches parameters by specifying limit's default (100) and maximum (100), offset's default (0), and that updated_at parameters expect epoch integers. This adds vital meaning beyond parameter names and titles.

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 explicitly states the action ('List'), the resource ('Threat Library actions'), and the returned fields ('light metadata: id, name, updated_at'). This clearly distinguishes it from sibling tools like 'picus_get_threat_action' which retrieves a single action's details.

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 clear context on pagination (limit/offset with max 100) and filtering (updated_at_gte/lte in epoch), which helps the agent know how to use the tool. However, it does not explicitly state when NOT to use this tool or suggest alternatives like searching, but the context is strong enough.

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

picus_list_threat_actorsA

List all threat actors in the Threat Library (id, name, aka aliases).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden but only states 'List' without disclosing behavioral traits such as pagination, rate limits, or authentication requirements. It is not misleading but lacks depth.

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?

Single sentence, direct, and contains no redundant information. Every word adds value.

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 zero-parameter list-all tool with no output schema, the description is complete: it specifies the resource and the fields returned. No further details are necessary given the simplicity.

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 tool has zero parameters and 100% schema coverage, so the baseline is 4. The description adds no parameter information, but none is needed.

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 specifies the verb 'List' and the resource 'threat actors in the Threat Library', with parenthetical detail on returned fields (id, name, aka aliases), distinguishing it from sibling tools like picus_search_threats or picus_get_threat.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like picus_search_threats or picus_list_threat_actions. The description does not mention when not to use it or provide context for selection.

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

picus_search_threatsA

Search the Picus Threat Library with rich filters.

Filters (all optional): severities (Low/Medium/High), attack_category_ids, attack_module_ids, release_date_gte/lte (epoch), is_predefined, affected_products, affected_os (Windows/Linux/macOS), unified_kill_chains, threat_actors, mitre_attack (tactics), attacker_objectives. Paginated via limit/offset; response includes a pages object with total_count.

Array filters are sent comma-separated. Each threat includes framework mappings and its objective/action flows.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
severitiesNo
affected_osNo
mitre_attackNo
is_predefinedNo
threat_actorsNo
release_date_gteNo
release_date_lteNo
affected_productsNo
attack_module_idsNo
attack_category_idsNo
attacker_objectivesNo
unified_kill_chainsNo

TDQS

A3.8/5.0
Behavior4/5

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

Discloses pagination via limit/offset, array serialization (comma-separated), and response structure including pages object and framework mappings. No annotations are provided, so description carries full burden. Lacks auth or rate limit info but sufficiently transparent for expected use.

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?

Front-loaded with purpose, followed by concise enumeration of filters and pagination details. Efficient use of words, but could be slightly more structured with bullet points.

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?

Covers purpose, all optional filters, pagination behavior, and response content. For a search tool with 14 optional params and no output schema, the description provides sufficient context for correct 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 has 0% description coverage, but the description enumerates all 14 parameters, their types (e.g., severities: Low/Medium/High), and optionality. Adds meaning beyond schema property names, though not exhaustive for all parameter values.

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?

Clearly states 'Search the Picus Threat Library with rich filters', specifying verb and resource. However, no explicit differentiation from sibling tools like picus_get_threat, but the name and description imply a broader search capability.

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

Usage Guidelines3/5

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

Lists all filters as optional but does not provide guidance on when to use this tool versus alternatives (e.g., picus_get_threat for a single threat). Usage context is implied but not explicitly stated.

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. Dates show when Glama detected each change.

  1. 23 tool updatesv0.1.0
    • First observedpicus_get_action_alerts
    • First observedpicus_get_agent
    • First observedpicus_get_device_signatures
    • First observedpicus_get_latest_run_frameworks
    • First observedpicus_get_latest_run_result
    • First observedpicus_get_mitigation_device_stats
    • First observedpicus_get_run_frameworks
    • First observedpicus_get_run_result
    • First observedpicus_get_run_threats
    • First observedpicus_get_simulation
    • First observedpicus_get_template
    • First observedpicus_get_threat
    • First observedpicus_get_threat_action
    • First observedpicus_list_agents
    • First observedpicus_list_integration_agents
    • First observedpicus_list_integrations
    • First observedpicus_list_mitigation_devices
    • First observedpicus_list_not_blocked_actions
    • First observedpicus_list_simulations
    • First observedpicus_list_templates
    • First observedpicus_list_threat_actions
    • First observedpicus_list_threat_actors
    • First observedpicus_search_threats

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have distinct purposes, with minor overlap between 'latest' and specific run/framework variants. Descriptions clarify the difference, making confusion unlikely.

Naming Consistency5/5

All tools follow a consistent 'picus_verb_noun' pattern in snake_case, with verbs being 'list', 'get', or 'search'. No mixing or irregular naming.

Tool Count5/5

23 tools cover a broad domain (simulation, threats, agents, integrations, mitigation) without being excessive. Each tool serves a clear functional area.

Completeness3/5

The tool set provides comprehensive read access to all major entities (simulations, runs, threats, actions, etc.) but entirely lacks mutation (create/update/delete) capabilities, which limits its usefulness for active simulation management.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Connects MCP-compatible AI clients to a MITRE Caldera adversary emulation platform, enabling natural language construction of attack scenarios, agent inspection, and operation management.
    18
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with the AccuKnox cloud security platform through MCP, allowing users to query cloud assets, vulnerabilities, and perform security analysis via natural language or API.
    1
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BeardedInfoSec/picus-security-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server