caldera-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CALDERA_URL | No | Caldera server base URL | http://localhost:8888 |
| CALDERA_API_KEY | Yes | Caldera red team API key |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tasks | {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
} |
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| caldera_health_checkA | Verify that the Caldera server is reachable and return version information. Returns: JSON string with server health status and version details. |
| caldera_list_agentsA | List all agents connected to Caldera. Args: platform: Optional platform filter — 'windows', 'linux', or 'darwin'. Leave empty to return all platforms. alive_only: If True, only return agents that have checked in recently (within 3x their sleep_max interval). Default False. Returns: JSON string with a list of agents and their status. |
| caldera_get_agentA | Get full details for a specific agent by its PAW identifier. Args: paw: The agent's PAW (unique identifier assigned by Caldera). Returns: JSON string with full agent details including alive status. |
| caldera_list_abilitiesA | List available abilities in Caldera, with optional filters. Useful for finding what abilities already exist before creating new ones, or for mapping ATT&CK technique IDs to Caldera ability IDs when building an adversary from a STIX bundle. Args: technique_id: Filter by ATT&CK technique ID (e.g. 'T1059.001'). Leave empty to return all techniques. tactic: Filter by ATT&CK tactic (e.g. 'execution', 'discovery'). Leave empty to return all tactics. platform: Filter by executor platform — 'windows', 'linux', or 'darwin'. Leave empty to return all platforms. Returns: JSON string with a compact list of matching abilities (id, name, tactic, technique_id, platforms). |
| caldera_get_abilityA | Get full details for a single ability including all executors and commands. Args: ability_id: The Caldera ability UUID. Returns: JSON string with the full ability object. |
| caldera_create_abilityB | Create a new ability in Caldera. Args: name: Human-readable ability name (e.g. 'Dump LSASS memory'). tactic: ATT&CK tactic (e.g. 'credential-access', 'discovery'). technique_id: ATT&CK technique ID (e.g. 'T1003.001'). technique_name: ATT&CK technique name (e.g. 'OS Credential Dumping: LSASS Memory'). platform: Target platform — 'windows', 'linux', or 'darwin'. executor: Executor name — 'psh' (PowerShell), 'cmd', 'sh', or 'python'. command: The command to execute. Use #{variable} for Caldera facts. description: Optional description of what the ability does. timeout: Execution timeout in seconds (default 60). Returns: JSON string with the created ability including its generated ability_id. |
| caldera_delete_abilityA | Delete an ability from Caldera by its ID. Args: ability_id: The Caldera ability UUID to delete. Returns: Confirmation string. |
| caldera_list_adversariesA | List all adversary profiles in Caldera. Returns: JSON string with a compact list of adversaries (id, name, description, ability count). |
| caldera_get_adversaryA | Get full details for a single adversary profile including ability ordering. Args: adversary_id: The Caldera adversary UUID. Returns: JSON string with the full adversary object. |
| caldera_create_adversaryA | Create a new adversary profile from an ordered list of ability IDs. Args: name: Human-readable adversary name (e.g. 'APT29 Credential Access'). ability_ids: Ordered list of Caldera ability UUIDs. description: Optional description of the adversary's TTPs or scenario context. Returns: JSON string with the created adversary including its generated adversary_id. |
| caldera_update_adversaryA | Update an existing adversary profile. Args: adversary_id: The Caldera adversary UUID to update. name: New name (leave empty to keep existing). ability_ids: New ordered ability list (leave empty to keep existing). description: New description (leave empty to keep existing). Returns: JSON string with the updated adversary. |
| caldera_delete_adversaryA | Delete an adversary profile from Caldera. Args: adversary_id: The Caldera adversary UUID to delete. Returns: Confirmation string. |
| caldera_list_operationsA | List all operations in Caldera with their current state and progress. Returns: JSON string with a compact list of operations (id, name, state, adversary, progress). |
| caldera_get_operationA | Get full details for an operation including its execution chain. Args: operation_id: The Caldera operation ID. Returns: JSON string with the full operation object including chain results. |
| caldera_create_operationA | Create a new operation in Caldera. Operations are created in 'paused' state by default — always perform scope review and get explicit user confirmation before resuming execution. Args: name: Human-readable operation name. adversary_id: UUID of the adversary profile to run. group: Agent group to target (leave empty for all connected agents). state: Initial state — 'paused' (default) or 'running'. Returns: JSON string with the created operation including its operation ID. |
| caldera_set_operation_stateA | Change the state of an existing operation. Valid transitions: paused → running (resume execution) running → paused (pause execution) running → stop (terminate cleanly) Args: operation_id: The Caldera operation ID. state: Target state — 'running', 'paused', or 'stop'. Returns: JSON string with the updated operation state. |
| caldera_get_operation_resultsA | Get a structured summary of operation execution results. Args: operation_id: The Caldera operation ID. Returns: JSON string with execution summary and per-ability results. |
| caldera_delete_operationA | Delete an operation from Caldera. Args: operation_id: The Caldera operation ID to delete. Returns: Confirmation string. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Every tool targets a distinct resource-action pair (ability, adversary, operation, agent). No two tools have overlapping purposes; even similar verbs like 'get' and 'list' are clearly differentiated by singular vs. plural. An agent can easily select the right tool.
All tools follow a consistent verb_noun pattern with the server prefix 'caldera_'. The verbs (create, delete, get, list, update, health_check, set) are uniform and predictable. No mixing of styles or ambiguous verbs.
18 tools is slightly above the typical 3-15 well-scoped range, but each tool serves a clear purpose for managing Caldera resources. The count feels justified given the domain (multiple CRUD operations, agent listing, health check, state management) and not excessive.
The tool surface covers CRUD for abilities, adversaries, and operations, plus agent querying and state management. Minor gaps exist: no update_ability or update_operation (though update_adversary is present), and no delete_agent. These are not critical but slightly reduce completeness.