MITRE ATT&CK MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MITRE ATT&CK MCP ServerShow me techniques used by APT29 for initial access"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🛡️ MITRE ATT&CK MCP Server
AI-Native Access to the World's Leading Threat Intelligence Framework
Features • Installation • Quick Start • Tools • Examples • Roadmap
🎯 Overview
The MITRE ATT&CK MCP Server transforms the world's leading adversary knowledge base into an AI-native interface. Built for the Model Context Protocol, it enables LLMs and agentic systems to:
🔍 Query 200+ techniques, 140+ groups, 700+ software entries
🧠 Reason over complex threat relationships and TTPs
📊 Visualize coverage gaps with ATT&CK Navigator layers
⚡ Scale threat intelligence workflows with structured tools
Perfect for: Security teams, threat hunters, detection engineers, AI researchers, and anyone building intelligent security systems.
What is this?
mitre-attack-mcp-server is a self-contained MCP server that provides machine-callable access to the MITRE ATT&CK framework using official STIX data with LLMs friendly structured outputs.
It enables:
🤖 LLMs to reason about ATT&CK techniques, groups, software, and mitigations
🧠 Agentic workflows to generate threat explanations and coverage maps
🔍 Security teams to query ATT&CK relationships programmatically
📊 Visualization via ATT&CK Navigator layers
No scraping.
No fragile APIs.
Just official MITRE data, structured and reliable.
Related MCP server: MITRE ATT&CK MCP Server
📑 Table of Contents
✨ Key Features
✅ 65+ MCP tools across ATT&CK domains (Enterprise, Mobile, ICS)
✅ Automatic STIX download & caching on first run
✅ Native ATT&CK Navigator layer generation
✅ Designed for LLMs & MCP-compatible clients
✅ In-memory caching for instant query responses
✅ Type-safe with Pydantic models
✅ Clean, production-ready, self-contained server
✅ Comprehensive test coverage
📦 Installation
Via PyPI (recommended) - Python Users
pip install mitre-mcp-servernpm
npm install -g @imouiche/mitre-attack-mcp-servernpx (no installation required)
npx @imouiche/mitre-attack-mcp-serverVia uv (Modern Python)
uv pip install mitre-mcp-serverLocal Development
git clone https://github.com/imouiche/complete-mitre-attack-mcp-server.git
cd complete-mitre-attack-mcp-server
npm installUsing uv (Python package manager)
git clone https://github.com/imouiche/complete-mitre-attack-mcp-server.git
cd complete-mitre-attack-mcp-server
uv sync⚡ Quick Start
1. Install
pip install mitre-mcp-server2. Configure Claude Desktop
Add to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mitre-attack": {
"command": "npx",
"args": ["-y", "@imouiche/mitre-attack-mcp-server"]
}
}
}3. Restart Claude Desktop
Quit Claude Desktop completely (Cmd+Q on macOS) and reopen it.
4. Start Querying!
Ask Claude:
"What techniques does APT29 use for initial access?"
"Generate an ATT&CK Navigator layer for ransomware groups"
"Show me all Windows persistence techniques"
Data downloads automatically on first run (~59MB, cached at ~/.mitre-mcp-server/data/).
📦 MCP Registry
This server is officially registered in the Model Context Protocol (MCP) Registry.
Registry ID: io.github.imouiche/mitre-attack-mcp-server
View in Official Registry: https://registry.modelcontextprotocol.io/?q=mitre-attack-mcp-server
Installation Options
Option 1: Direct NPM
npm install -g @imouiche/mitre-attack-mcp-serverOption 2: NPX (no installation)
npx @imouiche/mitre-attack-mcp-serverOption 3: Discover via Registry
Visit MCP Registry
Search for "mitre-attack"
Click the server card for installation instructions
🛠️ Available Tools
The server exposes 50+ MCP tools covering all major MITRE ATT&CK entities and relationships.
📊 Infrastructure & Metadata
Tool | Description |
| Show download status, file paths, sizes, and ATT&CK release version |
| Generate an ATT&CK Navigator layer (JSON output) |
| Return Navigator layer metadata template |
🎯 Techniques
Tool | Description |
| Get a technique by ATT&CK ID (e.g., T1055) |
| Search techniques by name or description |
| Retrieve all techniques |
| Parent techniques only |
| All subtechniques |
| Subtechniques of a parent |
| Parent of a subtechnique |
| Tactics associated with a technique |
| Techniques under a tactic |
| Techniques for a platform |
| Revoked techniques |
🧑💻 Groups (Threat Actors)
Tool | Description |
| Find group by name or alias |
| Search groups |
| All ATT&CK groups |
| Lookup groups by alias |
| Groups using a technique |
| Groups using software |
| Groups attributed to a campaign |
🧪 Software (Malware & Tools)
Tool | Description |
| Get all software |
| Search software |
| Lookup software by alias |
| Software used by a group |
| Software used in campaigns |
| Software using a technique |
📌 Campaigns
Tool | Description |
| Get all campaigns |
| Lookup campaigns by alias |
| Campaigns using a technique |
| Campaigns using software |
| Campaign attribution |
🛡️ Mitigations
Tool | Description |
| Get all mitigations |
| Mitigations for a technique |
| Techniques mitigated by a mitigation |
🧭 Tactics, Data Sources & ICS
Tool | Description |
| Get all tactics |
| Get all data sources |
| Get all data components |
| Data components detecting a technique |
| Get ICS assets |
| Assets targeted by a technique |
💡 Example Queries
Threat Intelligence
"What techniques does APT29 use for initial access?"
"Which groups target financial institutions?"
"Show me all ransomware-related software"
"What are the aliases for the Lazarus Group?"Detection Engineering
"What data sources detect credential dumping?"
"Generate a coverage map for EDR capabilities"
"List all techniques for Windows privilege escalation"
"What can detect T1055 (Process Injection)?"Threat Hunting
"What techniques use PowerShell?"
"Show me lateral movement techniques for Linux"
"Which groups use Cobalt Strike?"
"What persistence techniques target macOS?"Mitigation & Defense
"What mitigations exist for phishing attacks?"
"Show me all mitigations for privilege escalation"
"What techniques does MFA mitigate?"Compliance & Gap Analysis
"Generate a layer for all techniques our EDR covers"
"Compare APT29 TTPs against our detection capabilities"
"Show unmitigated techniques in our environment"📊 ATT&CK Navigator Visualization
The generate_layer tool produces ATT&CK Navigator–compatible JSON.
Usage:
Ask Claude to generate a layer:
"Generate an ATT&CK Navigator layer for all techniques used by APT29"
Save the JSON output to a file (e.g.,
apt29_layer.json)Upload to ATT&CK Navigator
Visualize technique coverage, threat actor usage, or mitigation mapping
Real-World Example Using LangGraph
Threat Investigation:
Read my Medium blog demonstrating how a multi-agent LangGraph system leverages these tools to perform a real-world threat investigation.Live Demo:
Explore the interactive Gradio 6.2 demo on Hugging Face Spaces.
Example Layer Use Cases:
Red Team Coverage: Map all techniques used in an exercise
Detection Gaps: Highlight unmonitored techniques
Threat Actor Profile: Visualize group TTPs
Mitigation Coverage: Show what's protected vs. exposed
🔧 Technical Details
Architecture
Language: Python 3.12+
Framework: FastMCP for Model Context Protocol
Data Library: Official
mitreattack-python(v5.3.0+)Async/Await: Optimal performance for concurrent queries
Type Safety: Full Pydantic models for all data structures
Testing: Comprehensive pytest coverage
Data
Enterprise ATT&CK: v18.1+ (~50.9MB)
Mobile ATT&CK: v18.1+ (~4.9MB)
ICS ATT&CK: v18.1+ (~3.5MB)
Total: ~59MB cached locally
Storage:
~/.mitre-mcp-server/data/v{version}/Update: Auto-downloads on install, uses cached data on subsequent runs
Performance
In-memory caching: All domains loaded at startup
Query speed: Sub-second for most operations
Graph traversal: Efficient relationship queries
Concurrent: Handles multiple simultaneous requests
Requirements
Python: 3.12 or higher
Node.js: 16+ (for NPM installation)
Disk Space: ~150MB (includes dependencies + data)
Memory: ~200MB RAM when running
🚀 Roadmap & Vision
This project is the first component of a larger vision to build comprehensive agentic security automation by integrating multiple security knowledge bases and frameworks.
Current Status
✅ MITRE ATT&CK - Threat intelligence & adversary TTPs (v18.1)
Planned Integrations
🔜 CVE/NVD - Vulnerability intelligence and exploit mapping
🔜 MITRE D3FEND - Defensive countermeasure knowledge graph
🔜 Sigma Rules - Detection rule translation and management
🔜 CAPEC - Common Attack Pattern Enumeration
🔜 CWE - Software weakness enumeration
🔜 Agentic Pentesting - Multi-agent autonomous security testing
Ultimate Goal
Enable AI agents to autonomously:
🎯 Map attack surfaces and identify vulnerabilities
🛡️ Recommend defensive countermeasures
🔍 Generate detection rules and validate coverage
🤖 Orchestrate multi-stage security assessments
📊 Reason about complete attack-defense lifecycles
Get Involved
We welcome contributions from:
🎓 Students working on thesis projects (cybersecurity, AI, agentic systems)
🔬 Researchers in AI security, threat intelligence, or agent frameworks
💻 Developers passionate about security automation
🏢 Organizations interested in research partnerships or commercial applications
Areas of Interest:
Integrating additional security frameworks (CVE, D3FEND, Sigma)
Building agentic workflows for pentesting and red teaming
Developing detection rule generation pipelines
Creating threat intelligence reasoning systems
Improving MCP tooling and documentation
📬 Interested? Open an issue, start a discussion, or reach out directly!
🤝 Contributing
Found a bug? Have a feature request? Want to contribute to the roadmap?
All contributions welcome!
Development Setup
git clone https://github.com/imouiche/complete-mitre-attack-mcp-server.git
cd complete-mitre-attack-mcp-server
uv sync
# uv run pytest (test/ folder not yet released)
uv run python -m mitre_mcp_server.server📜 License
Apache License 2.0
See LICENSE for full details.
👨💻 About the Author
Inoussa Mouiche, Ph.D.
AI/ML Researcher | Cybersecurity | Agentic AI Systems | Software Engineering
🎓 University of Windsor - WASP Lab
🔬 Research Focus: Threat Intelligence Automation, Machine Learning, Multi-Agent Security Systems, LLM-Powered Security Operations
📫 Connect
🐙 GitHub: @imouiche
📧 Email: mouiche@uwindsor.ca
💼 LinkedIn: Inoussa Mouiche, Ph.D.
📚 Google Scholar: Publications
🎓 Award Nomination
Gold Medal: The Governor General's Academic Medal
💼 Open to opportunities in:
AI/ML Engineering & Research
Cybersecurity & Threat Intelligence
Agentic AI Development
Security Automation & Orchestration
Academic & Industry Collaborations
🙏 Acknowledgments
Built on MITRE ATT&CK® - the industry standard for adversary tactics and techniques
Powered by mitreattack-python - official MITRE library
Implements Model Context Protocol - Anthropic's standard for AI-tool integration
Inspired by the amazing MCP developer community including R. Jasper, and more...
MITRE ATT&CK® is a registered trademark of The MITRE Corporation.
⭐ Star this repo if you find it useful!
Interested in collaborating on agentic engineering systems? Let's connect!
Made with ❤️ for the cybersecurity and AI communities
Available Tools
65 toolsgenerate_layerA
Generate an ATT&CK Navigator layer for visualization.
This wraps mitreattack.navlayers.UsageLayerGenerator and produces a
JSON layer highlighting techniques associated with a given ATT&CK ID.
Only the following ATT&CK ID prefixes are supported:
- Gxxxx : groups (intrusion sets)
- Mxxxx : mitigations (course-of-action)
- Sxxxx : software (tool/malware)
- Dxxxx : data components
Technique IDs (Txxxx / Txxxx.xxx) are NOT supported here.
Args:
attack_id: ATT&CK ID (Gxxxx, Mxxxx, Sxxxx, or Dxxxx)
score: Score to assign to all matched techniques in the layer
domain: ATT&CK domain (e.g., "enterprise", "mobile", "ics")
Returns:
{
"success": bool,
"attack_id": "<G/M/S/D ID>",
"domain": "<domain>",
"count": int, # number of techniques in layer
"layer": { ... } | null, # ATT&CK Navigator layer JSON
"message": "<summary or error>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| score | No | ||
| domain | No | enterprise | |
| attack_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It describes the tool's behavior: it wraps a library, generates a layer, highlights techniques, and returns a structured JSON with specific fields. It does not mention potential side effects, auth requirements, or rate limits, but it covers the core behavioral traits adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a header, supported prefixes section, args list, and return format. It is front-loaded with purpose. While somewhat lengthy, every sentence adds value, and the structure aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is provided in the description, the return values are fully documented. The tool is moderately complex with 3 parameters and specific constraints, and the description covers all necessary aspects for an agent to use it correctly, especially compared to sibling query tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema has 0% description coverage, the description text documents all three parameters (attack_id, score, domain) with types, defaults, and usage details (e.g., score assigned to all matched techniques). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Generate an ATT&CK Navigator layer for visualization' and explains it produces a JSON layer highlighting techniques for a given ATT&CK ID. It clearly distinguishes from sibling query tools by specifying supported ID prefixes (G, M, S, D) and explicitly excluding technique IDs (Txxxx).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use the tool (for supported ATT&CK IDs G, M, S, D) and when not to use it (technique IDs are NOT supported). It provides clear context but does not name specific alternative tools for unsupported IDs, which would further aid decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_assetsA
Get all ATT&CK assets in a domain (primarily ICS).
Assets represent industrial control system components
(PLC, HMI, Engineering Workstation, Control Server, etc.)
Args:
domain: ATT&CK domain ("ics" recommended)
remove_revoked_deprecated: Exclude revoked/deprecated entries
include_description: Include asset descriptions
Returns:
{
"domain": "<domain>",
"count": <number>,
"assets": [
{
"name": "...",
"stix_id": "x-mitre-asset--UUID",
"description": "...",
"attack_id": "<Axxxx or None>"
}
],
"formatted": "<human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | ics | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavioral traits. It explains parameters and return format but omits details like rate limits, auth requirements, or side effects. The 'primarily ICS' hint is useful but incomplete for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with Args and Returns sections, but slightly verbose. Could be more concise, but still efficient for a 3-param tool with output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity, presence of output schema, and clear parameter explanations, the description is complete. It covers what the tool does, how to use it, and what to expect in return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by explaining each parameter (domain recommendation, removing revoked, including description). The Args section adds meaningful context beyond the schema's default values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves all ATT&CK assets in a domain, primarily ICS. The verb 'Get all' and resource 'assets' are specific, and it distinguishes from siblings like 'get_assets_targeted_by_technique' which is a different operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description recommends 'ics' domain and clarifies the tool is for assets. While it doesn't explicitly state when not to use, the context is clear and no direct alternative exists among siblings for fetching all assets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_campaignsA
Get all ATT&CK campaigns in a domain.
Campaigns represent specific intrusion events or long-running operations
attributed to threat actors (e.g., SolarWinds, Operation Ghost).
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics")
remove_revoked_deprecated: Whether to exclude revoked/deprecated entries
include_description: Include campaign descriptions in the output
Returns:
{
"domain": "<domain>",
"count": <int>,
"campaigns": [
{
"attack_id": "<Cxxxx or None>",
"name": "<campaign name>",
"stix_id": "campaign--UUID",
"description": "<text or null>"
},
...
],
"formatted": "<nicely formatted output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the tool's behavior (retrieves campaigns, allows filtering by domain, revocation, and description inclusion) and provides the output schema. It does not mention side effects or safety, but the 'get' nature implies read-only. Overall, it is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an introductory sentence, an args block, and a returns block. Every sentence adds value, and the format is efficient for an AI agent to parse. No verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers return values thoroughly. It explains the concept of campaigns and parameter effects. The tool's role among many sibling list tools is clear, making the description complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates by explaining each parameter (domain, remove_revoked_deprecated, include_description) with meaningful context beyond their names and types. This fully clarifies parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all ATT&CK campaigns in a domain' and elaborates on what campaigns represent (e.g., 'intrusion events or long-running operations attributed to threat actors'), making the tool's purpose specific and distinguishable from sibling tools like get_groups or get_techniques.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving all campaigns in a domain, but does not explicitly state when to use this tool over alternatives (e.g., get_campaigns_attributed_to_group). The context is clear but lacks explicit exclusions or comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_datacomponentsA
Get all ATT&CK data components in a domain.
Data components are specific aspects of a data source that can be monitored.
For example, the "Process" data source has components like
"Process Creation", "Process Termination", etc.
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated entries.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of data components>,
"datacomponents": [
{
"name": "<data component name>",
"stix_id": "<x-mitre-data-component--UUID>",
"description": "<text or null>",
"data_source_stix_id": "<x-mitre-data-source--UUID or null>",
"data_source_name": "<parent data source name or null>",
"data_source_attack_id": "<data source ATT&CK ID or null>"
},
...
],
"formatted": "<optional human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes a read operation with no side effects, and it details the return format extensively, including fields like stix_id and data_source_name. No hidden behaviors are indicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, example explanation, Args, and Returns sections. It is moderately sized; the example of 'Process' could be slightly shorter but is still helpful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully specifies the output schema and parameter defaults. It covers the core use case well, though it could mention relationships to sibling tools like get_datacomponents_detecting_technique for better context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0%, the description includes an Args section that explains each parameter (domain, remove_revoked_deprecated, include_description). This adds meaning beyond the raw schema, specifying defaults and the purpose of each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all ATT&CK data components in a domain' and explains what data components are with an example. It distinguishes this tool from siblings like get_all_datasources and get_all_techniques by focusing specifically on data components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving all data components in a domain but does not provide explicit guidance on when to use this tool versus alternatives like get_datacomponents_detecting_technique. No when-not-to-use or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_datasourcesA
Get all ATT&CK data sources in a domain.
Data sources represent *what* kind of telemetry you collect
(e.g., Process Monitoring, Network Traffic, File Monitoring).
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated data sources.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of data sources>,
"datasources": [
{
"name": "<data source name>",
"stix_id": "<x-mitre-data-source--UUID>",
"description": "<text or null>",
"platforms": ["<Windows>", "<Linux>", ...] # if available
},
...
],
"formatted": "<optional human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the read-only nature (get all), explains parameters and return format in detail. It does not mention rate limits or auth, but the behavior is transparent and no contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (purpose, explanation, args, returns) but is slightly verbose. The extra explanation of what data sources are is helpful for context. Every sentence adds value, but could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 optional params, list return), the description is fully complete. It covers the operation, parameters, and output format in detail. The output schema is described, so no gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds full meaning: domain values, remove_revoked_deprecated and include_description behavior, defaults. It explains each parameter's purpose completely, compensating for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all ATT&CK data sources in a domain.' It explains what data sources are, and the tool name distinguishes it from siblings like 'get_all_datacomponents'. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing all data sources for a domain, but provides no explicit guidance on when to use this tool vs alternatives like 'get_all_datacomponents' or other get-all tools. No when-not-to-use or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_groupsA
Get all APT groups (intrusion sets) in a domain.
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated groups.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of groups>,
"groups": [
{
"attack_id": "GXXXX",
"name": "<group name>",
"aliases": [...],
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>"
},
...
],
"formatted": "<optional human-readable listing>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it lists parameters and detailed return structure including fields like attack_id, name, aliases, etc. No hidden side effects mentioned, but it's 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, but the return JSON is detailed; could be slightly more concise. However, every part adds value and it's front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of a complete output schema in the description, all relevant information is covered. Parameters and return values are fully documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's Args section explains each parameter: domain with allowed values, remove_revoked_deprecated and include_description with clear semantics. The description adds full meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all APT groups (intrusion sets) in a domain,' specifying verb, resource, and scope. It distinguishes from siblings like 'get_groups_by_alias' and 'search_groups' by implying this returns the full set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. It lists parameters but lacks context like 'use search_groups for specific names.' Usage is implied but not contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_matricesA
Get all ATT&CK matrices in a domain.
Matrices are the top-level organizational structures in ATT&CK.
Each domain typically has one or more matrices
(e.g., Enterprise ATT&CK matrix).
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated matrices.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of matrices>,
"matrices": [
{
"attack_id": "<matrix ID or None>",
"name": "<matrix name>",
"stix_id": "<x-mitre-matrix--UUID>",
"description": "<text or null>"
},
...
],
"formatted": "<optional human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 the return format and the effect of each parameter, implying a read-only operation. The description does not explicitly state that the tool is safe and non-destructive, but the context and name suggest no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose, a brief contextual sentence, and a clear listing of arguments and return type. Every sentence is valuable and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 parameters, output schema present), the description is thorough. It covers the domain options, parameter defaults, and the full return structure. The absence of annotations does not leave gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the tool description explains each parameter (domain, remove_revoked_deprecated, include_description) with clear meaning and default values, fully compensating for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all ATT&CK matrices in a domain') and specifies the resource (matrices). It explains what matrices are, distinguishing them from other sibling tools that retrieve different ATT&CK objects like techniques, groups, or software.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (to retrieve matrices for a domain) and mentions that each domain typically has one or more matrices, implying a common use case. However, it does not explicitly state when not to use the tool or suggest alternative tools for similar purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_mitigationsA
Get all mitigations (defensive countermeasures) in a domain.
Mitigations are security controls or practices that can reduce the
effectiveness of adversary techniques (e.g., M1013, M1017).
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated mitigations.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of mitigations>,
"mitigations": [
{
"attack_id": "MXXXX" | null,
"name": "<mitigation name>",
"stix_id": "<course-of-action--UUID>",
"description": "<text or null>"
},
...
],
"formatted": "<optional human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It thoroughly describes the return structure including optional fields and the formatted/message fields. It implicitly indicates read-only by the 'get' verb, but could explicitly state no side effects. The output schema adds transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (intro, Args, Returns) and uses bullet points for the return schema. It is front-loaded with the main purpose. Minor redundancy with the definition of mitigations, but overall concise for the information provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (listing) and the presence of an output schema, the description is fairly complete. It covers all parameters and return fields. Does not mention error handling or invalid domain behavior, but that is acceptable for a basic query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates with an explicit Args section explaining each parameter's purpose and expected values (e.g., domain options, boolean effects). This adds value beyond the bare schema which only provides names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves all mitigations in a domain, with a brief definition of mitigations. While it distinguishes itself from sibling tools like get_mitigations_mitigating_technique by being a broad listing, it does not explicitly contrast with other get_all_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing all mitigations but does not explicitly state when to use this tool versus more specific tools (e.g., get_mitigations_mitigating_technique). No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_parent_techniquesA
Get all parent techniques (exclude subtechniques) in a given domain.
Parent techniques are the main techniques without a dot in their ATT&CK ID,
e.g., T1566, T1055 (not T1566.001).
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated techniques.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of parent techniques>,
"parent_techniques": [
{
"attack_id": "<TXXXX>",
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
"tactics": ["<Tactic 1>", "<Tactic 2>", ...]
},
...
],
"formatted": "<optional human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the input parameters and the complete output structure including fields like formatted and message. It does not explicitly state read-only nature, but the function name and output description imply no side effects. The transparency is good but could be improved by noting safe behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, clarification of parent techniques, and separate args/returns sections. It is slightly verbose but front-loaded with the core purpose. Every sentence adds value, so it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is fully described, the description covers all necessary behavioral details. The parameter explanations and output format are comprehensive for a tool with 3 simple parameters. No gaps remain for an agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description explains each parameter: domain with example values, remove_revoked_deprecated and include_description as boolean controls. Default values are also specified, adding significant semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all parent techniques (exclude subtechniques) in a given domain.' It defines parent techniques via the ATT&CK ID format (no dot), making the tool's purpose specific and distinct from siblings like get_all_techniques and get_all_subtechniques.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly differentiates from siblings by focusing on parent techniques, but does not explicitly state when to use this tool versus alternatives. The context of sibling tools includes get_all_techniques and get_all_subtechniques, so the purpose is clear enough for an agent to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_softwareA
Get all software (malware and tools) in a domain.
This is effectively an alias for the MITRE helper get_software(), but it
returns structured results suitable for LLMs and clients.
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated software.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of software objects>,
"software": [
{
"attack_id": "<SXXXX or similar> | null",
"name": "<software name>",
"aliases": [...],
"stix_id": "<malware--UUID or tool--UUID>",
"type": "<malware|tool|...>",
"description": "<text or null>"
},
...
],
"formatted": "<optional human-readable listing>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 tool is an alias for get_software() and returns structured results, and includes a detailed return format. However, it does not explicitly state that the operation is read-only, safe, or any side effects, though the context suggests it is non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first line, followed by an Args and Returns section. It is slightly lengthy but every sentence adds value. Could be more concise, but it is effectively organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 optional parameters, no required params), the description is comprehensive. It covers purpose, parameters, and return format in detail. The output schema is provided in the Returns section, making it complete for an LLM to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully by documenting all three parameters in an Args section: domain, remove_revoked_deprecated, and include_description, explaining their purpose and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all software (malware and tools) in a domain.' It specifies the resource (software) and the scope (all in a domain). It distinguishes itself from the sibling 'get_software' by noting it is an alias that returns structured results suitable for LLMs and clients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving all software in a domain with optional filters, but it does not explicitly state when to use this tool over alternatives like 'get_software', 'search_software', or other sibling tools. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_subtechniquesA
Get all subtechniques in a given ATT&CK domain.
Subtechniques are more specific versions of parent techniques,
e.g., T1566.001 and T1566.002 are subtechniques of T1566.
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated subtechniques.
include_description: Whether to include descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of subtechniques>,
"subtechniques": [
{
"attack_id": "<TXXXX.YYY>",
"name": "<subtechnique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
"tactics": ["<Tactic 1>", "<Tactic 2>", ...],
"parent_attack_id": "<TXXXX>",
"parent_name": "<parent technique name>",
"parent_stix_id": "<attack-pattern--UUID>"
},
...
],
"formatted": "<optional human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the return structure in detail, implying a read-only, idempotent operation. It does not mention side effects, failures, or authorization, but given the tool's nature (simple retrieval), this is adequate. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise opening sentence, a clarifying example, then an Args list, and a full Returns schema. Every sentence is informative and earns its place. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema provided in the description, and the simple nature of the tool (3 optional parameters, no nested objects), the description is complete. It covers all aspects: purpose, parameters, output format, and example. No missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so by listing all three parameters with clear explanations: domain is specified with allowed values ('enterprise', 'mobile', 'ics'), and the two boolean parameters are described. This adds significant value beyond the schema's defaults and titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all subtechniques') and the resource ('in a given ATT&CK domain'). It explains what subtechniques are and distinguishes from sibling tools like 'get_subtechniques_of_technique' and 'get_all_techniques' by specifying the scope (domain-level).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. While the purpose is clear, it lacks guidance on when not to use it (e.g., when needing subtechniques of a specific parent technique, use 'get_subtechniques_of_technique'). Usage context 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.
get_all_tacticsA
Get all ATT&CK tactics for a domain.
Tactics represent the adversary's tactical goals (e.g., Initial Access,
Defense Evasion, Persistence).
Args:
domain: ATT&CK domain ('enterprise', 'mobile', 'ics')
include_description: Whether to include tactic descriptions.
Returns:
{
"domain": "<domain>",
"count": <number>,
"tactics": [
{
"attack_id": "<TAxxxx>" | null,
"name": "...",
"stix_id": "x-mitre-tactic--UUID",
"description": "...",
}
],
"formatted": "<optional human-readable text>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description bears the full burden. It clearly indicates a read-only operation (getting data) and describes the return structure, but does not mention authentication, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for introduction, arguments, and returns. It is front-loaded and clear, though slightly verbose with the explanation of tactics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description provides a detailed return format and explains all parameters. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that explains both parameters (domain with examples, include_description as boolean), adding significant meaning beyond the input schema which only has defaults. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get all ATT&CK tactics for a domain.' It explains what tactics are and provides examples, distinguishing it from sibling tools that retrieve tactics by matrix or technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like get_tactics_by_matrix or get_tactics_by_technique. Usage is implied but lacks direct guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_techniquesA
Get all ATT&CK techniques for a given domain.
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
remove_revoked_deprecated: Whether to exclude revoked/deprecated techniques.
include_description: Whether to include technique descriptions.
Returns:
{
"domain": "<domain>",
"count": <number of techniques>,
"techniques": [
{
"attack_id": "TXXXX or TXXXX.YYY",
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
"tactics": [ "<tactic 1>", "<tactic 2>", ... ]
},
...
],
"formatted": "<optional human-readable output>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 the return structure via an output schema and describes parameter effects. However, it does not mention any behavioral traits such as permissions, rate limits, or side effects (though the tool is read-only, this is not explicitly stated).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear purpose followed by Args in a bullet-like format and a Returns block. Every sentence contributes value; no unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (3 parameters, many siblings, output schema provided), the description covers the essential aspects: purpose, parameters, and return structure. It lacks explicit usage guidance against siblings, but the output schema compensates for return value clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning by explaining each parameter (domain: ATT&CK domain with allowed values; remove_revoked_deprecated: exclude deprecated; include_description: include descriptions). This goes beyond the schema's names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Get all ATT&CK techniques for a given domain', which is a specific verb+resource combination. It includes the domain parameter and optional filters, clearly distinguishing it from sibling tools that target specific subsets like techniques by tactic or platform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving all techniques for a domain, but does not explicitly mention when to use this tool versus alternatives (e.g., get_techniques_by_tactic, get_techniques_by_platform). No exclusions or when-not guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_assets_targeted_by_techniqueA
Get all ICS assets targeted by a specific technique.
Assets represent industrial control system components such as
PLCs, RTUs, Engineering Workstations, HMIs, Control Servers, etc.
Args:
technique_stix_id: Technique STIX UUID identifier
domain: ATT&CK domain ('ics' strongly recommended)
include_description: Include asset descriptions, if available
Returns:
{
"technique": {
"attack_id": "Txxxx",
"name": "...",
"stix_id": "<attack-pattern--UUID>"
},
"count": int,
"assets": [
{
"name": "...",
"stix_id": "<x-mitre-asset--UUID>",
"description": "<optional text>",
"asset_type": "<ICS component type>",
},
...
],
"formatted": "<multi-line readable text>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | ics | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. Provides input and output details but lacks safety or behavior notes (e.g., read-only, rate limits). Adequate but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with Args and Returns sections, but slightly verbose. Could tighten some explanations without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description fully documents return structure: technique, count, assets with fields, formatted text, and summary. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so description explains all three parameters with brief, clear descriptions. Could add acceptable formats/values for technique_stix_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool gets all ICS assets targeted by a specific technique, distinguishing it from siblings like get_techniques_targeting_asset and get_all_assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. Context implies it's for targeted asset retrieval, but doesn't mention alternatives like get_all_assets for broader queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attack_idA
Convert a STIX UUID into its human-readable ATT&CK ID.
This tool resolves internal STIX identifiers such as:
attack-pattern--UUID
malware--UUID
intrusion-set--UUID
tool--UUID
course-of-action--UUID
into ATT&CK IDs such as:
T1566 (Technique)
T1055.002 (Sub-technique)
G0016 (Group)
S0154 (Software)
M1013 (Mitigation)
Args:
stix_id: Full STIX UUID identifier.
domain: ATT&CK domain ("enterprise", "mobile", "ics").
Returns:
{
"found": bool,
"attack_id": "<ATT&CK ID or null>",
"message": "<status message>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| stix_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It explains input/output format and resolution process. For a simple lookup tool, this is sufficient, though it lacks discussion of error cases or performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and well-structured with bullet points and examples. Every element serves a purpose, though some minor redundancy could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple conversion tool with an output schema, the description covers inputs, outputs, and examples completely. No major gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description details both parameters (stix_id as full STIX UUID, domain with examples), adding significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts STIX UUIDs to human-readable ATT&CK IDs, provides input/output examples, and distinguishes from siblings (none of which do this conversion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing to resolve a STIX UUID to an ATT&CK ID but does not explicitly state when to use or avoid this tool versus alternatives, though context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaigns_attributed_to_groupA
Get all campaigns attributed to a specific intrusion set (APT group),
identified by its STIX ID.
Campaigns represent specific operations or intrusion events attributed
to a threat group.
Args:
group_stix_id: STIX UUID of the group (e.g., "intrusion-set--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include campaign descriptions.
Returns:
{
"group": {
"attack_id": "GXXXX" | null,
"name": "<group name or null>",
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>"
} | null,
"count": <number of campaigns>,
"campaigns": [
{
"attack_id": "CXXXX" | null,
"name": "<campaign name>",
"stix_id": "<campaign--UUID>",
"description": "<text or null>"
},
...
],
"formatted": "<formatted human-readable block>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| group_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It explains the purpose, parameters, and details the return structure including fields like 'group', 'count', 'campaigns', 'formatted', and 'message'. It also provides context that campaigns are specific operations attributed to a threat group. No side effects or destructive behavior are indicated, which aligns with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro, Args section, and Returns section (a pseudo-output schema). It is front-loaded with the main purpose. While concise, it could be slightly shorter without losing clarity, but it earns its length by providing important parameter and return details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, no annotations), the description is extremely complete. It includes parameter details, return structure, and operational context. The presence of an output schema in the description further enhances completeness. An agent has all the information needed to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates thoroughly by explaining each parameter: 'group_stix_id' is described as a STIX UUID with an example, 'domain' lists allowed values, and 'include_description' clarifies its boolean purpose. This adds essential meaning beyond the schema's bare types and titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Get', the resource 'campaigns', and the scope 'attributed to a specific intrusion set', with a note on STIX ID identification. It distinguishes itself from sibling tools like `get_all_campaigns` and `get_campaigns_by_alias` by focusing on attribution to a specific group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that the tool is for campaigns attributed to a specific group, implying usage when the agent has a group STIX ID. However, it lacks explicit alternative guidance or when-not-to-use scenarios, though the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaigns_by_aliasA
Get campaigns by their alias.
Campaigns frequently have multiple names assigned by different vendors
or research teams. This function resolves those aliases.
Args:
alias: Campaign alias or alternate name (case-insensitive)
domain: ATT&CK domain ("enterprise", "ics", etc.)
include_description: Include campaign descriptions in output
Returns:
{
"alias": "<requested name>",
"count": int,
"campaigns": [
{
"name": "...",
"stix_id": "<campaign--UUID>",
"attack_id": "Cxxxx" | null,
"description": "..." | null
},
...
],
"formatted": "<multi-line readable text>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | ||
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It details the return format, case-insensitivity of alias, and optional parameters. However, it does not mention error handling or behavior when alias is not found, though the output schema implies a message field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a header, explanation, and Args/Returns sections. It is appropriately sized for a tool with 3 parameters and an output schema. Could be slightly more concise but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 params, output schema, many siblings), the description covers purpose, alias resolution, parameter details, and return structure. Missing explicit error handling or edge cases, but overall complete for a get operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does so effectively: alias is described as case-insensitive, domain is 'ATT&CK domain', and include_description is 'Include campaign descriptions in output'. This adds full meaning beyond the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'campaigns by their alias', distinguishing from sibling tools like 'get_campaigns_attributed_to_group' or 'get_campaigns_using_software'. The explanation of alias resolution adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use this tool ('resolve aliases') but does not explicitly exclude alternatives or state when not to use it. Sibling tools exist for different filters, so a comparative note would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaigns_using_softwareA
Get all campaigns that use specific software/malware.
This is a reverse lookup: Software → Campaigns.
Args:
software_stix_id: Software STIX UUID identifier (e.g., 'malware--UUID', 'tool--UUID').
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Whether to include campaign descriptions.
Returns:
{
"software": {
"attack_id": "SXXXX or similar" | null,
"name": "<software name or null>",
"stix_id": "<software STIX ID>",
"type": "<malware|tool|...> or null",
"description": "<text or null>",
} | null,
"count": <number of campaigns>,
"campaigns": [
{
"attack_id": "CXXXX" | null,
"name": "<campaign name>",
"stix_id": "<campaign--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "<type>",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of campaigns>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| software_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It details the return structure comprehensively and indicates it is a read operation. However, it does not mention potential performance implications, pagination, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, starting with a clear statement of purpose, followed by a brief conceptual note, then detailed but essential parameter and return descriptions. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and that an output schema is provided, the description is thorough. It covers inputs and outputs completely, but lacks explicit notes on how it differs from sibling tools or error handling scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully by providing clear descriptions for all three parameters, including format examples for software_stix_id and enumerating domain options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get all campaigns that use specific software/malware.' It emphasizes 'reverse lookup: Software → Campaigns', which distinguishes it from sibling tools like get_campaigns_attributed_to_group or get_campaigns_using_technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning it's a reverse lookup, but it does not explicitly state when to use this tool versus alternatives. It lacks guidance on prerequisites or context where other tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaigns_using_techniqueA
Get all campaigns that use a specific technique.
This is a reverse lookup: Technique → Campaigns.
Args:
technique_stix_id: Technique STIX UUID identifier
(e.g., 'attack-pattern--UUID').
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Whether to include campaign descriptions.
Returns:
{
"technique": {
"attack_id": "TXXXX or TXXXX.YYY" | null,
"name": "<technique name or null>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
} | null,
"count": <number of campaigns>,
"campaigns": [
{
"attack_id": "CXXXX" | null,
"name": "<campaign name>",
"stix_id": "<campaign--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "<type>",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of campaigns>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It details the return structure and parameter effects but does not state that the tool is read-only, has no side effects, or mention any rate limits or authentication needs. The returned output schema is well-described, but the missing safety profile leaves some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, then clearly separates Args and Returns. While the return structure is lengthy, it is justified by the presence of an output schema. Every sentence adds value, but minor redundancy exists (e.g., repeating 'null' in multiple places).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no schema descriptions, the description is quite complete: it covers all parameters, the full return object, and status fields. It lacks error handling info and prerequisites, but for a read-only reverse lookup tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The 'Args' section explains all three parameters: technique_stix_id (with example format), domain (with valid values), and include_description (as boolean). This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves all campaigns using a specific technique, and explicitly labels it a reverse lookup (Technique → Campaigns). This distinguishes it from siblings like get_campaigns_attributed_to_group or get_campaigns_using_software.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to find campaigns by technique) but does not explicitly specify when not to use it or compare to alternatives. The phrase 'reverse lookup' provides some guidance, but lacks exclusions or context for selection among many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datacomponents_detecting_techniqueB
Get all data components that can detect a specific technique.
Primary mode:
- Use mitreattack-python relationship traversal (if present)
Fallback mode (when relationship traversal yields 0):
- Read technique.x_mitre_data_sources (strings)
- Resolve data source objects by name
- Return data components whose x_mitre_data_source_ref points to those data sources
- If the string includes a component name (e.g., "Process: Process Creation"),
filter to that component when possible.
Returns the same structure as before, plus a debug block.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (none provided), the description discloses the two operational modes, fallback logic, and the addition of a debug block. However, it does not mention side effects, authentication requirements, or rate limits. For a read-only tool, this is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise and well-structured, using clear sections for primary and fallback modes. It avoids unnecessary verbiage, though the bullet list could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description is insufficient. It does not describe the return format, debug block content, or clarify 'same structure as before'. Parameter descriptions are absent, leaving major gaps for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the tool description does not explain any of the three parameters ('domain', 'technique_stix_id', 'include_description'). The description discusses data source resolution but not parameter meaning or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves data components that detect a specific technique. It specifies the resource ('data components') and verb ('Get'), and distinguishes from reverse tools like get_techniques_detected_by_datacomponent. The primary and fallback modes are outlined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains two modes (primary and fallback) with conditions for use. It details fallback logic when relationship traversal yields zero results. However, it does not explicitly mention when to use this tool versus its reverse counterpart, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_statsA
Return statistics about downloaded MITRE ATT&CK STIX data.
This confirms which domains are present on disk, their file paths, sizes, and ATT&CK release version. It assumes that downloads have already been attempted at server startup.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description sufficiently discloses the tool's behavior: it returns read-only statistics and assumes downloads were attempted at startup. No side effects are mentioned, but none are expected for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and every word adds value. No wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description adequately covers the tool's functionality and assumptions. It could mention error conditions, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the empty schema is fully covered. The description adds no additional parameter information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns statistics about downloaded MITRE ATT&CK STIX data, specifying what is included (domains, file paths, sizes, release version). It is distinct from sibling tools like 'get_stats' and other entity-specific tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after server startup to check downloaded data. It provides clear context for when to use the tool, though it does not explicitly exclude alternatives or compare with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_by_nameA
Retrieve an intrusion set (APT group) by name or alias (case-insensitive match).
This tool searches ATT&CK intrusion sets by name or alias and returns the first
matching group. Matching is case-insensitive and supports partial matches.
Examples:
- get_group_by_name("APT29")
- get_group_by_name("Lazarus")
- get_group_by_name("Fancy Bear")
Args:
group_name: The group name or alias to search for (case-insensitive).
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include descriptions in the output.
Returns:
{
"found": bool,
"group": {
"attack_id": "<GXXXX>",
"name": "<group name>",
"aliases": [...],
"stix_id": "<intrusion-set--...>",
"description": "<description or null>"
},
"formatted": "<human-readable text>",
"message": "<status>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| group_name | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavior: returns first matching group, case-insensitive, partial matches, and details the return schema including 'found' and 'message' fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with examples and args, but slightly verbose with repeated mention of 'case-insensitive'. Still efficient and front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is fully documented in the description and the tool is simple, the description covers all aspects: purpose, parameters, behavior, return format, and example usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning for all three parameters: group_name (case-insensitive search), domain (ATT&CK domain with default), include_description (controls output). This fully compensates for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and resource 'intrusion set (APT group)' by name or alias, distinguishing it from siblings like get_all_groups (returns all groups) and search_groups (broader search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (search by name/alias with case-insensitive partial matching) and includes examples, but does not explicitly say when not to use or compare with alternatives like get_groups_by_alias.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groups_attributing_to_campaignA
Get all APT groups (intrusion sets) attributed to a specific campaign.
This is a reverse lookup: Campaign → Groups.
It follows attribution relationships from a campaign STIX ID to
intrusion sets (groups).
Args:
campaign_stix_id: STIX ID of the campaign (e.g., "campaign--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include group descriptions.
Returns:
{
"campaign": {
"attack_id": "CXXXX" | null,
"name": "<campaign name or null>",
"stix_id": "<campaign--UUID>",
"description": "<text or null>"
} | null,
"count": <number of groups>,
"groups": [
{
"attack_id": "GXXXX" | null,
"name": "<group name>",
"aliases": [...],
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "<type>",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of groups>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| campaign_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 the return structure in detail and explains arguments, but it does not mention any behavioral traits such as idempotency, error handling, permissions, or rate limits. For a read-only get operation, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear one-sentence purpose, a brief explanation, then separate 'Args' and 'Returns' sections. While the return block is long, it is necessary due to the absence of a separate output schema. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no enums, no formal output schema), the description covers purpose, all parameters, and the full return structure. It lacks notes on error conditions or edge cases (e.g., invalid STIX ID), but for a straightforward lookup tool, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, yet the description provides an 'Args' section that explains each parameter (campaign_stix_id, domain with allowed values, include_description) and their defaults. This adds significant meaning beyond the raw schema, compensating for the lack of schema descriptions. Baseline for 3 parameters is 3, but the description elevates it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves APT groups attributed to a specific campaign, explicitly labels it as a 'reverse lookup: Campaign → Groups', and distinguishes it from sibling tools like get_campaigns_attributed_to_group (the opposite direction). The verb 'Get' and resource 'APT groups' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you have a campaign STIX ID and want groups) via the 'reverse lookup' phrasing, but it does not explicitly state when not to use it or name alternative tools for other scenarios (e.g., get_groups_using_software for software-based lookups).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groups_by_aliasA
Get APT groups (intrusion sets) matching a given alias.
Many groups have multiple aliases—e.g., APT29 is also known as:
"Cozy Bear", "NOBELIUM", "Midnight Blizzard", etc.
This tool returns all groups whose alias list contains the given alias
(case-insensitive exact match, per MITRE's own alias indexing).
Args:
alias: Alias to search for (e.g., "Cozy Bear", "NOBELIUM").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include group descriptions.
Returns:
{
"count": <number>,
"groups": [
{
"attack_id": "GXXXX",
"name": "<group name>",
"aliases": [...],
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>"
},
...
],
"formatted": "<formatted list>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | ||
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It discloses the case-insensitive exact match behavior, return structure, and alias concept. It does not mention side effects or limitations, but as a read-only query, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with examples and Args/Returns sections, but it is slightly verbose. The purpose is front-loaded, and every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (alias matching, multiple groups, optional parameters), the description fully documents input, behavior, and return structure. The output schema is described in text, providing complete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides detailed parameter explanations, including alias examples, domain enumeration, and include_description default. It adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves APT groups by alias, provides examples, and distinguishes from siblings like get_group_by_name and search_groups by focusing on alias matching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not explicitly state when to use it versus alternatives or when not to use it. It implies usage context through examples but lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groups_using_softwareA
Get all APT groups (intrusion sets) that use a specific software/malware.
This is a reverse lookup: Software → Groups.
It follows 'uses' relationships from a software STIX ID (tool/malware)
to intrusion sets.
Args:
software_stix_id: STIX ID of the software object
(e.g., "malware--UUID", "tool--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include group descriptions.
Returns:
{
"software": {
"attack_id": "SXXXX or similar" | null,
"name": "<software name or null>",
"stix_id": "<software STIX ID>",
"type": "<tool|malware|...> or null",
"description": "<text or null>",
} | null,
"count": <number of groups>,
"groups": [
{
"attack_id": "GXXXX" | null,
"name": "<group name>",
"aliases": [...],
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "uses",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of groups>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| software_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It details the return format and relationships covered ('uses'), but does not mention behavioral traits such as read-only nature, permission requirements, or side effects. The detailed output schema partly mitigates this, but explicit safety or behavioral notes are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns). While the inclusion of the entire output schema is helpful, it makes the description somewhat lengthy. The first paragraph is concise and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema is provided within the description, the tool is fairly complete: it covers input parameters, return structure, and the relationship direction. However, it omits discussion of prerequisites, error handling, or edge cases (e.g., no groups found), which would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only titles and defaults, with no parameter descriptions. The description's 'Args' section adds crucial meaning: it explains that software_stix_id expects a UUID with a specific prefix, domain lists valid options, and include_description clarifies its boolean purpose. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all APT groups (intrusion sets) that use a specific software/malware' and identifies it as a 'reverse lookup: Software → Groups'. The verb is specific, the resource is well-defined, and the direction distinguishes it from siblings like get_groups_using_technique or get_software_used_by_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the reverse lookup direction, which implicitly guides when to use this tool (when you have a software and want groups). However, it does not explicitly state when not to use it or compare to alternatives like get_software_used_by_group, which serves the opposite direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groups_using_techniqueA
Get all APT groups (intrusion sets) that use a specific technique.
This is a reverse lookup: Technique → Groups.
It follows 'uses' relationships from a technique STIX ID to intrusion sets.
Args:
technique_stix_id: STIX ID of the technique
(e.g., "attack-pattern--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include group descriptions.
Returns:
{
"technique": {
"attack_id": "TXXXX or TXXXX.YYY" | null,
"name": "<technique name or null>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
} | null,
"count": <number of groups>,
"groups": [
{
"attack_id": "GXXXX" | null,
"name": "<group name>",
"aliases": [...],
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "uses",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of groups>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It details the relationship traversal ('follows uses relationships from a technique STIX ID to intrusion sets') and provides an exhaustive return schema. It does not disclose potential side effects or permissions, but the operation is inherently read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long due to the included return schema, but it is well-structured: brief intro, Args list, and Returns section. It is front-loaded with purpose. A minor reduction could be made, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the output schema being provided, the description still covers the return structure. All three input parameters are described. For a reverse lookup tool with moderate complexity, the description is fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The Args section explains each parameter: technique_stix_id with format example, domain with valid values, and include_description with semantics. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb-resource phrase: 'Get all APT groups (intrusion sets) that use a specific technique.' It further distinguishes itself as a reverse lookup ('Technique → Groups'), differentiating it from sibling tools like get_techniques_used_by_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states this is a reverse lookup and follows 'uses' relationships, implying when to use it. Sibling tools include get_techniques_used_by_group (the forward direction), providing implicit differentiation. However, it lacks explicit when-not-to-use or alternative tool instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_techniquesA
Get all techniques used by a specific APT group (intrusion set).
This tool:
1) Locates a group by name or alias (case-insensitive, partial match).
2) Uses MITRE's get_techniques_used_by_group() to retrieve techniques
related to that group (via 'uses' relationships).
Args:
group_name: Group name or alias (e.g., "APT29", "Lazarus Group").
domain: ATT&CK domain ("enterprise", "mobile", or "ics").
include_description: Whether to include descriptions in the output.
Returns:
{
"found": bool, # whether the group was found
"group": {
"attack_id": "GXXXX",
"name": "...",
"aliases": [...],
"stix_id": "intrusion-set--...",
"description": "..." | null
} | null,
"count": <number of techniques>,
"techniques": [
{
"attack_id": "TXXXX or TXXXX.YYY",
"name": "...",
"stix_id": "attack-pattern--...",
"description": "..." | null,
"relationships": [
{
"stix_id": "relationship--...",
"relationship_type": "uses",
"description": "..." | null,
"source_ref": "...",
"target_ref": "..."
},
...
]
},
...
],
"formatted": "<human-readable technique list>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| group_name | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the lookup process, partial matching, and output structure. However, it does not explicitly state that the operation is read-only or has no side effects, which is minor given the clear intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for purpose, steps, args, and output. It is somewhat lengthy but each part serves a purpose. Minor redundancy in args list versus schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers return values. It lacks details on error handling (e.g., group not found) but the output includes a 'found' boolean. Overall, it is sufficiently complete for a retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully explains all three parameters, their defaults, and the group_name lookup semantics. This adds essential meaning beyond the schema's property titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves all techniques used by a specific APT group, with matching details (case-insensitive, partial). This distinguishes it from siblings like get_software_used_by_group or get_groups_using_technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for group techniques but does not explicitly guide when to choose this over alternatives. No exclusions or comparisons to sibling tools are provided, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_layer_metadataA
Return a standard ATT&CK Navigator layer metadata template.
This provides default layer properties (version info, gradient settings,
layout, filters, etc.) adapted to a specific ATT&CK domain.
Useful for clients that want to build custom layers programmatically
without starting from scratch.
Args:
domain: One of "enterprise", "mobile", "ics". Defaults to "enterprise".
Returns:
{
"success": bool,
"domain": "<domain>",
"metadata": { ... }, # Navigator layer metadata
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a read-only retrieval by describing it as returning a template, but does not explicitly state side effects (none) or permissions required. The transparency is adequate but could be more explicit about non-destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear purpose statement followed by an Args/Returns section. Every sentence adds value, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter) and the presence of an output schema in the description, the description covers the parameter, return format, and use case. It is complete enough for a metadata retrieval tool, though it omits error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description's Args section explains the domain parameter with valid values ('enterprise', 'mobile', 'ics') and default. This adds meaningful guidance beyond the bare schema, though it lacks formal enum constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns a standard ATT&CK Navigator layer metadata template and explains its contents (version info, gradient settings, etc.). It distinguishes from siblings like generate_layer by implying this is a base template for building custom layers, though not explicitly naming alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use (building custom layers programmatically) but does not explicitly state when not to use or mention alternative tools like generate_layer. It provides usage context but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mitigations_mitigating_techniqueA
Get all mitigations that address a specific technique.
Helper returns: list[RelationshipEntry[Mitigation]]
So each item is a wrapper that contains a Mitigation object (usually in `.object`).
We must unwrap before extracting fields.
Returns (same schema as before):
{
"found": bool,
"technique": {...} | null,
"count": int,
"mitigations": [...],
"formatted": str,
"message": str
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It explains that the helper returns a list of RelationshipEntry[Mitigation] requiring unwrapping, and provides the full response schema. This is sufficient for a read-only query with no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 7 lines, includes a somewhat technical reference to 'list[RelationshipEntry[Mitigation]]', and could be more concise. However, it is front-loaded with the primary purpose and uses clear language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is provided, the description's inclusion of the return structure adds value but does not compensate for missing parameter descriptions. The tool is simple (read-only, few parameters), so completeness is adequate but not exemplary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage of parameters is 0%—the description adds no information about 'technique_stix_id', 'domain', or 'include_description' beyond their names and defaults. The description does not clarify expected formats, constraints, or usage patterns for these parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Get all mitigations that address a specific technique', providing a clear verb (Get), resource (mitigations), and scope (for a specific technique). This distinguishes it from siblings like 'get_all_mitigations' (all mitigations) and 'get_techniques_mitigated_by_mitigation' (reverse mapping).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for a specific technique but provides no when-to-use or when-not-to-use guidance, nor does it reference alternative tools from the sibling list. The 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.
get_nameA
Resolve the human-readable object name for a given STIX ID.
This converts internal STIX UUIDs such as:
attack-pattern--UUID
intrusion-set--UUID
malware--UUID
tool--UUID
course-of-action--UUID
into ATT&CK object names such as:
"Phishing"
"APT29"
"Cobalt Strike"
"Valid Accounts"
Args:
stix_id: STIX UUID of the object.
domain: ATT&CK domain ("enterprise", "mobile", "ics").
Returns:
{
"found": bool,
"name": "<object name or null>",
"message": "<status message>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| stix_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It details input/output structure and examples, but does not disclose side effects, required permissions, safety profile, or limitations. The tool appears to be a simple lookup, but behavioral traits like read-only nature are not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with separate sections for purpose, input examples, parameter listing, and return format. It is appropriately sized, front-loading the main action, and every sentence adds value. No redundant or vague statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is complete. It covers the conversion logic, parameter specifics, return format with fields, and status codes via the message field. No missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It defines both parameters (stix_id, domain) with concrete examples and expected values. The domain parameter's default and possible values are implied, but not exhaustive. This adds meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Resolve the human-readable object name for a given STIX ID.' It provides concrete examples of input and output, making the conversion specific and immediately understandable. This distinguishes it from sibling tools that retrieve full objects or lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (when you have a STIX ID and need the readable name) and gives context on the types of STIX IDs and domains. It does not explicitly state when not to use it or mention alternatives, but the examples and parameter listing provide implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_object_by_attack_idA
Retrieve any MITRE ATT&CK object by its external ATT&CK ID and STIX type.
This tool supports techniques, intrusion sets (APT groups), malware,
tools, mitigations, campaigns, data sources, data components, and tactics.
Args:
attack_id: The external ATT&CK ID (e.g., "T1055", "G0016", "S0154", "M1013").
stix_type: The STIX object type (e.g., "attack-pattern", "intrusion-set").
domain: ATT&CK domain ("enterprise", "mobile", or "ics").
include_description: Whether to include the object's description field.
Returns:
{
"found": bool,
"object": {
"id": "<ATT&CK ID>",
"name": "<object name>",
"stix_id": "<STIX object ID>",
"type": "<stix_type>",
"description": "<description or null>"
},
"formatted": "<human-readable formatted output>",
"message": "<status>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| attack_id | Yes | ||
| stix_type | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It clearly indicates this is a read operation ('Retrieve') and provides the full return schema, including a 'found' flag for missing objects. It lists supported object types and explains each parameter's role. However, it does not disclose potential rate limits or authentication needs, but these are likely minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose statement followed by notes, args, and returns. It is concise at about 12 lines, with no redundant sentences. The front-loading is effective. Minor improvement: could combine the supported types list into one line for even tighter prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a lookup tool with 4 parameters and an output schema. It covers all parameter details, return format with fields, and lists supported object types. The output schema is clearly described, so the agent knows what to expect. No gaps for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully with an 'Args:' section that explains each parameter with examples (e.g., 'T1055', 'G0016'), allowed domain values ('enterprise', 'mobile', 'ics'), and the boolean include_description. This adds meaning beyond the schema's property definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve any MITRE ATT&CK object by its external ATT&CK ID and STIX type.' It lists supported object types, making the scope explicit. This distinguishes it from siblings like get_object_by_stix_id (different lookup key) or get_objects_by_type (returns list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With many sibling tools (e.g., get_object_by_stix_id, get_objects_by_name), the description should mention typical use cases, but it does not. The implied usage is when you have the external ATT&CK ID and STIX type, but no exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_object_by_stix_idA
Retrieve any MITRE ATT&CK object by its STIX ID (UUID).
STIX IDs are internal identifiers like:
- attack-pattern--a62a8db3-f23a-4d8f-afd6-9dbc77e7813b
This tool is useful when you already have a STIX ID from another
query or relationship and want to resolve it to the full object.
Args:
stix_id: STIX object ID (e.g., "attack-pattern--...").
domain: ATT&CK domain to search in ("enterprise", "mobile", "ics").
include_description: Whether to include the object's description.
Returns:
{
"found": bool,
"object": {
"attack_id": "<ATT&CK external ID or null>",
"name": "<object name>",
"stix_id": "<STIX ID>",
"type": "<stix type>",
"description": "<description or null>"
},
"formatted": "<human-readable formatted text>",
"message": "<status message>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses the return format with fields (found, object, formatted, message) and implies a read-only operation. More details on error handling or permissions could be added, but the core behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro, explanation, Args, and Returns. It is concise, front-loads the purpose, and every sentence adds value. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (context: true), the description still covers return fields. Parameters are fully documented. The description is complete for resolving objects by STIX ID, covering purpose, usage, parameters, and output. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. The 'Args' section explains each parameter: stix_id format, domain options ('enterprise', 'mobile', 'ics'), and include_description purpose. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve any MITRE ATT&CK object by its STIX ID (UUID).' This is a specific verb (retrieve) and resource (MITRE ATT&CK object) and distinguishes from siblings like 'get_object_by_attack_id' which uses a different identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'This tool is useful when you already have a STIX ID from another query or relationship and want to resolve it to the full object.' This provides clear context for when to use it. It does not explicitly exclude cases or name alternatives, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_objects_by_contentA
Search MITRE ATT&CK objects by matching text inside their description field.
This performs a full-text search over object descriptions. It is useful for:
• Finding techniques related to specific technologies (e.g., “PowerShell”)
• Finding groups mentioning a region or country (e.g., “Russia”)
• Finding mitigations referencing specific defenses (e.g., “multi-factor”)
• Searching malware or tool descriptions for keywords
Args:
content: The text to search for (case-insensitive, partial match).
object_type: STIX object type, such as:
- "attack-pattern" (techniques)
- "intrusion-set" (APT groups)
- "malware"
- "tool"
- "course-of-action" (mitigations)
- "campaign"
- "x-mitre-data-source"
- "x-mitre-data-component"
- etc.
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to return descriptions in the structured output.
Returns:
{
"count": <number of matches>,
"objects": [
{
"attack_id": "<ATT&CK ID or null>",
"name": "<object name>",
"stix_id": "<STIX ID>",
"type": "<object_type>",
"description": "<description or null>"
},
...
],
"formatted": "<human-readable formatted list>",
"message": "<status message>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| content | Yes | ||
| object_type | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral transparency. It discloses that the search is case-insensitive partial match over descriptions, and details the return format (count, objects, formatted, message). It implies read-only behavior, but does not explicitly state safety or side-effect absence, which would strengthen transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, bullet points for use cases, and a detailed return format example. It is somewhat lengthy but each section adds value. Front-loading the core action aids quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4 parameters, no annotations, and presence of an output schema, the description covers search behavior, parameter details, use cases, and return format. It does not discuss error handling or performance, but it provides sufficient context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain each parameter. It does so thoroughly: content (case-insensitive partial match), object_type (with example STIX types), domain (with example values), and include_description (boolean). It adds meaning not present in the schema, making parameter usage clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches MITRE ATT&CK objects by matching text inside their description field. It provides specific use case examples (finding techniques by technology, groups by region, etc.), which differentiates it from sibling tools like get_objects_by_name (name search) or search_techniques (which may search other fields).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists explicit use cases (finding techniques by technology, groups by region, etc.) that clarify when to use this tool. However, it does not explicitly mention when not to use it or compare it to alternative tools like search_techniques or get_objects_by_name, so there is minor room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_objects_by_nameA
Retrieve MITRE ATT&CK objects by exact name match (case-sensitive).
This tool performs an exact name match for a specific STIX type within
a given ATT&CK domain. It is more strict than generic search methods,
which typically perform partial or keyword matching.
Examples:
- Technique: get_objects_by_name("Phishing", "attack-pattern")
- Group: get_objects_by_name("APT29", "intrusion-set")
- Malware: get_objects_by_name("Cobalt Strike", "malware")
Args:
name: Exact object name to search for (case-sensitive).
stix_type: STIX object type (same values as get_object_by_attack_id),
e.g. "attack-pattern", "intrusion-set", "malware",
"tool", "course-of-action", etc.
domain: ATT&CK domain ("enterprise", "mobile", or "ics").
include_description: Whether to include descriptions in the formatted output
and structured result.
Returns:
{
"count": <number of matching objects>,
"objects": [
{
"attack_id": "<ATT&CK external ID or null>",
"name": "<object name>",
"stix_id": "<STIX ID>",
"type": "<stix_type>",
"description": "<description or null>"
},
...
],
"formatted": "<human-readable multi-object formatted text>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| domain | No | enterprise | |
| stix_type | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It thoroughly explains the tool's behavior: exact match, case-sensitive, returns structured results with count, objects, formatted text, and a message. No hidden side effects are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear overview, examples, parameter details, and return format. Every sentence contributes value, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description still fully documents the return structure. It covers all necessary aspects for the tool's purpose, leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description fully compensates. It explains each parameter: name (exact name, case-sensitive), stix_type (with examples of valid types), domain (with options), and include_description (boolean, default false). This adds critical meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves MITRE ATT&CK objects by exact name match, case-sensitive, and distinguishes itself from generic search methods by emphasizing strictness. Examples of usage with specific object types further clarify the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is for exact name matching and is more strict than generic search methods, implying when to use it. However, it does not explicitly state alternatives or when not to use this tool, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_objects_by_typeA
Get all objects of a specific STIX type.
This is a generic method to retrieve ATT&CK/CTI objects by STIX type.
It complements more specific tools such as get_all_techniques(),
get_all_groups(), etc.
Common STIX types include:
- 'attack-pattern' (techniques)
- 'malware' (malware)
- 'tool' (tools)
- 'intrusion-set' (APT groups)
- 'campaign' (campaigns)
- 'course-of-action' (mitigations)
- 'x-mitre-matrix' (matrices)
- 'x-mitre-tactic' (tactics)
- 'x-mitre-data-source' (data sources)
- 'x-mitre-data-component' (data components)
- 'x-mitre-asset' (ICS assets)
Args:
stix_type: STIX object type to fetch.
domain: ATT&CK domain ('enterprise', 'mobile', 'ics', ...).
remove_revoked_deprecated: Exclude revoked/deprecated objects.
include_description: Include object descriptions in output.
Returns:
{
"stix_type": "<type>",
"domain": "<domain>",
"count": int,
"objects": [
{
"name": "...",
"stix_id": "<stix-id>",
"attack_id": "<T/G/S/M/C/... or null>",
"description": "<text or null>",
},
...
],
"formatted": "<multi-line readable text>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| stix_type | Yes | ||
| include_description | No | ||
| remove_revoked_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. While 'get' implies read-only, the description does not explicitly state it is non-destructive or discuss permissions, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (purpose, common types, Args, Returns). The list of common STIX types is helpful but slightly lengthy. Overall concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and an output schema described inline, the description covers all essential aspects: parameters, return format, and behavior (removing revoked/deprecated). It is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds extensive meaning: it describes each parameter (stix_type, domain, remove_revoked_deprecated, include_description) including defaults and provides common STIX type examples. The Returns section also explains output structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all objects of a specific STIX type, listing common types and explicitly contrasting with more specific sibling tools like get_all_techniques().
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes it complements more specific tools, providing implicit guidance. However, it lacks explicit when-not-to-use or direct comparisons with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_objects_created_afterA
Get all ATT&CK objects created after a specific timestamp.
Useful for detecting new additions to the framework.
Timestamp must be ISO8601 format, e.g., '2024-01-01T00:00:00Z'.
Returns:
{
"found": bool,
"count": int,
"objects": [
{
"id": "<ATT&CK ID or None>",
"name": "...",
"stix_id": "...",
"type": "<stix-type>",
"description": "..." | None
},
...
],
"formatted": "<pretty text>",
"message": "..."
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| timestamp | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must bear full transparency burden. It documents the return structure in detail but does not disclose potential side effects, limitations (e.g., pagination, performance), or error conditions. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet detailed. Returns inline specifies output structure, saving space. No redundant sentences. Well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema covers return values well. Parameter semantics are partially covered. Overall, adequate for basic use but incomplete for advanced usage scenarios (e.g., no guidance on `domain` values).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It explains `timestamp` format but does not clarify `domain` (default 'enterprise') or `include_description` (default true). Missing parameter details reduce effectiveness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Get', resource 'ATT&CK objects', and condition 'created after a specific timestamp'. Distinguishes from sibling tools like `get_objects_modified_after` by focusing on creation time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Useful for detecting new additions to the framework.' Includes format requirement for timestamp. Does not explicitly state when not to use or compare to alternatives, but gives enough guidance for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_objects_modified_afterA
Get all ATT&CK objects modified after a specific timestamp.
Useful for tracking updates and changes to the ATT&CK framework.
Timestamp must be ISO8601 format, e.g., '2024-01-01T00:00:00Z'.
Returns:
{
"found": bool,
"count": int,
"objects": [
{
"id": "<ATT&CK ID or None>",
"name": "...",
"stix_id": "...",
"type": "<stix-type>",
"description": "..." | None
},
...
],
"formatted": "<pretty text>",
"message": "..."
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| timestamp | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Provides timestamp format requirement and full output schema, but no annotations exist; lacks disclosure on side effects or authentication, which are minimal 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with front-loaded purpose, usage hint, format note, and structured output schema. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema covers return values, but missing parameter explanations for domain and include_description; additional context on scope or performance would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only describes timestamp format; domain and include_description parameters are unexplained despite 0% schema coverage, leaving gaps for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool gets all ATT&CK objects modified after a timestamp, using a specific verb and resource, and distinguishes from siblings like get_objects_created_after.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes use for tracking updates and changes, but does not explicitly specify when to use this tool versus alternatives or provide when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parent_technique_of_subtechniqueA
Get the parent technique of a subtechnique.
Args:
technique_stix_id: STIX UUID of the subtechnique.
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Whether to include the parent's description.
Returns:
{
"subtechnique_stix_id": "...",
"subtechnique_attack_id": "Txxxx.xxx" or null,
"parent": {
"attack_id": "Txxxx",
"name": "...",
"stix_id": "attack-pattern--UUID",
"description": "..." | null
} or null,
"formatted": "<human readable description>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 tool returns a structured object (subtechnique_stix_id, subtechnique_attack_id, parent object, formatted, message) and may return null for missing parents. This gives a good understanding of the tool's output, though it omits error handling details (e.g., invalid STIX ID).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-line purpose, an 'Args' section, and a 'Returns' section. It is front-loaded with the core action. However, the Returns section includes the full JSON structure which is somewhat lengthy; it could be slightly more concise by summarizing the return format without the full JSON example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema richness (3 parameters, 1 required) and presence of an output schema (described), the description covers all aspects: parameters, return structure, and a fallback (null). However, it does not provide examples, error cases, or mention any prerequisites (e.g., the subtechnique must exist). It is adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema parameter description coverage is 0%, so the description fully compensates by explaining each parameter: 'technique_stix_id: STIX UUID of the subtechnique', 'domain: ATT&CK domain', 'include_description: Whether to include the parent's description', including defaults. This adds complete meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get the parent technique of a subtechnique.' This is a specific verb+resource pair that distinguishes it from sibling tools like 'get_subtechniques_of_technique' (reverse operation) and 'get_all_parent_techniques' (different scope).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly mention when to use this tool versus alternatives. While the purpose is clear, there is no guidance on when not to use it or how it compares to sibling tools like 'get_all_parent_techniques' or 'get_subtechniques_of_technique'. The context signals only provide the sibling list without differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_procedure_examples_by_tacticA
Get all procedure examples for techniques in a specific tactic.
Shows real-world examples of how threat groups use techniques that fall
under a given tactic (e.g., Initial Access, Persistence).
Args:
tactic: Tactic name (e.g., "Initial Access", "Persistence").
Case-insensitive; should match ATT&CK tactic names.
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Include example descriptions when available.
Returns:
{
"tactic": {
"name": "<tactic name>",
"attack_id": "TAxxxx" | null,
"stix_id": "x-mitre-tactic--UUID" | null,
},
"count": int,
"examples": [
{
"relationship_id": "relationship--UUID",
"description": "<procedure text or null>",
"group": {
"attack_id": "Gxxxx" | null,
"name": "<group name or null>",
"stix_id": "intrusion-set--UUID" | null,
},
"technique": {
"attack_id": "Txxxx or Txxxx.xxx" | null,
"name": "<technique name or null>",
"stix_id": "attack-pattern--UUID" | null,
},
},
...
],
"formatted": "<multi-line human-readable text>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| tactic | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses it's a read operation via 'Get all procedure examples'. It details the return format and parameters, though it could explicitly state no side effects or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, with clear sections for args and returns. Every sentence serves a purpose, and the bullet format aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers all necessary aspects: purpose, parameters with defaults, and return structure. It is complete for an AI agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides semantics for each parameter: case-insensitivity for tactic, default for domain, boolean for include_description. This adds value beyond the schema's type info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves procedure examples for techniques within a specific tactic, using the verb 'Get' and identifying the resource. It distinguishes itself from siblings like get_procedure_examples_by_technique by focusing on a tactic vs. a single technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (for examples grouped by tactic) and implies it's for ATT&CK data. It does not explicitly mention when not to use or name alternatives, but the sibling list provides context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_procedure_examples_by_techniqueB
Get procedure examples showing how threat groups used a specific technique.
Procedure examples describe real incident behavior tied to this technique.
Args:
technique_stix_id: STIX UUID of the technique
domain: ATT&CK domain
include_description: Include descriptions of the examples if available
Returns:
{
"technique": {
"attack_id": "Txxxx",
"name": "...",
"stix_id": "attack-pattern--UUID"
},
"count": N,
"examples": [
{
"relationship_id": "relationship--UUID",
"source_group_attack_id": "Gxxxx",
"source_group_name": "...",
"description": "...",
"stix_id": "relationship--UUID"
},
...
],
"formatted": "<multi-line readable text>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description does not disclose any behavioral traits such as side effects, authentication requirements, rate limits, or idempotency. It only states that the tool returns procedure examples, which is minimal 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with only a few lines. It includes a docstring summarizing parameters and return value. However, it could be more structured (e.g., separating usage from return format). No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema (provided in the description), the description is fairly complete. It explains the purpose, parameters, and return format. It could mention valid domain values, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It lists the parameters in a docstring but does not explain what values are valid for domain (e.g., 'enterprise', 'mobile') or what include_description truly does. The description adds little beyond the parameter names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves procedure examples for a specific technique, with a verb 'Get' and resource 'procedure examples by technique'. It distinguishes from sibling tools like get_procedure_examples_by_tactic by specifying 'by technique' in the name and description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for looking up procedure examples for a given technique, but does not explicitly state when to use it versus alternatives (e.g., get_procedure_examples_by_tactic) or provide any exclusions. No guidance is given on prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revoked_techniquesC
Get all revoked techniques for a domain.
Revoked techniques are no longer valid in the framework, often because
they were merged or replaced.
Returns:
{
"found": bool,
"count": int,
"techniques": [...],
"formatted": "<pretty output>",
"message": "..."
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the output structure and explains the nature of revoked techniques (read-only). However, it lacks details on authorization requirements, side effects, or performance considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. The code block for return format is useful and well-structured. No extraneous sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two undocumented parameters and many sibling tools, the description is incomplete. It lacks parameter documentation and fails to provide enough context for an agent to use the tool correctly without prior knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds no meaning to parameters. It mentions 'domain' in the first sentence but does not explain that it defaults to 'enterprise' or what values are accepted. The include_description parameter is entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves revoked techniques for a domain, and explains what revoked techniques are. It distinguishes itself from other tools by specifying a subset (revoked) but does not explicitly differentiate from siblings that may also return lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives like get_all_techniques or get_technique_by_id. It does not provide context for appropriate usage or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_softwareA
Get all software (malware and tools) in a given ATT&CK domain.
This returns non-revoked, non-deprecated software objects, including
both malware and tools, as defined by the MITRE ATT&CK dataset.
Args:
domain: ATT&CK domain to search ("enterprise", "mobile", or "ics").
include_description: Whether to include descriptions in the output and
formatted text.
Returns:
{
"count": <number of software objects>,
"software": [
{
"attack_id": "<SXXXX or similar, if present>",
"name": "<software name>",
"stix_id": "<STIX ID>",
"type": "<malware|tool|...>",
"description": "<text or null>"
},
...
],
"formatted": "<human-readable list>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the transparency burden. It discloses that only non-revoked, non-deprecated software objects are returned and includes both malware and tools. It also describes the output structure in detail. While it does not explicitly declare the tool as read-only, the behavior is clearly for retrieval, and no side effects are implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Docstring sections (Args, Returns) but is relatively lengthy. It includes the full return schema, which is redundant since an output schema exists. While clear, it could be more concise by relying on the structured output schema rather than repeating it in text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 optional parameters, output schema present), the description is complete. It explains the filtering logic (domain, revoked/deprecated exclusion), parameter effects, and the return format. No critical gaps remain 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% coverage (no parameter descriptions), so the description must compensate fully. It does so by explaining the 'domain' parameter with example values ('enterprise', 'mobile', 'ics') and the 'include_description' boolean effect. This adds essential meaning beyond what the raw schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all software (malware and tools) for a given ATT&CK domain, specifying it returns non-revoked, non-deprecated objects. This distinguishes it from sibling tools like 'get_all_software' (which likely lacks domain filtering) and 'search_software' (which enables flexible search by name/alias).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly conditions usage on the 'domain' parameter, indicating the tool is appropriate when software from a specific ATT&CK domain is needed. However, it does not directly state when to avoid this tool (e.g., for cross-domain queries) or explicitly name alternative tools like 'get_all_software'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_software_by_aliasA
Find software/malware by alias (e.g., 'Beacon', 'Mimilib').
Many malware/tools have multiple alternative names. This tool searches
the software catalog for alias matches.
Args:
alias: Alias to search for.
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include description fields.
Returns:
{
"alias": "<alias>",
"count": <number of matches>,
"software": [
{
"attack_id": "<SXXXX or MXXXX or None>",
"name": "<software name>",
"aliases": [...],
"stix_id": "<malware--UUID or tool--UUID>",
"type": "<malware|tool|...>",
"description": "<text or null>"
},
...
],
"formatted": "<human readable output>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | ||
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It describes the search operation and return structure, but does not disclose side effects, permissions, or failure modes. It is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear summary followed by structured Args and Returns sections. It is front-loaded and efficient, though the documentation of returns partially overlaps with the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema, the description is fairly complete: it explains purpose, parameters, return structure, and the context of aliases. It does not cover edge cases but is sufficient for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides an 'Args:' section that explains each parameter (alias, domain, include_description) beyond just the parameter names. This adds meaningful context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find software/malware by alias' and explains that it searches the software catalog for alias matches. This is specific verb+resource and distinguishes from siblings like 'get_all_software' or 'search_software'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when searching by an alias, noting that many tools have multiple names. However, it does not explicitly state when to use this tool versus alternatives like 'get_groups_by_alias' or 'get_campaigns_by_alias', nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_software_used_by_campaignA
Get all software/malware used in a specific campaign.
Args:
campaign_stix_id: Campaign STIX UUID identifier (e.g., 'campaign--UUID').
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Whether to include software descriptions.
Returns:
{
"campaign": {
"attack_id": "CXXXX" | null,
"name": "<campaign name or null>",
"stix_id": "<campaign--UUID>",
"description": "<text or null>",
} | null,
"count": <number of software objects>,
"software": [
{
"attack_id": "SXXXX or similar" | null,
"name": "<software name>",
"stix_id": "<malware--UUID or tool--UUID>",
"type": "<malware|tool|...> or null",
"aliases": ["...", "..."],
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "<type>",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of software>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| campaign_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the parameters and provides a detailed return structure, including the formatted human-readable list and status message. However, it does not mention potential side effects or permissions requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, but the inline output schema example is lengthy. The core purpose is front-loaded, but some detail could be streamlined without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the lack of annotations, the description provides complete guidance: all parameters are explained, and the return structure is fully specified. This enables correct invocation and interpretation of results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It explains each parameter: campaign_stix_id (with example format), domain (with allowed values), and include_description (with default). This fully documents parameter semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Get all software/malware used in a specific campaign,' clearly stating the verb and resource. This distinguishes it from siblings like get_software_used_by_group and get_campaigns_using_software, which target different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description lacks explicit context on prerequisites (e.g., needing a campaign STIX ID) or situations where other tools like get_campaigns_using_software would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_software_used_by_groupA
Get all software (malware and tools) used by a specific APT group,
identified by its STIX ID.
This uses MITRE's `get_software_used_by_group` to follow 'uses'
relationships from an intrusion set (group) to software objects.
Args:
group_stix_id: STIX ID of the group (e.g., "intrusion-set--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include software descriptions.
Returns:
{
"group": {
"attack_id": "GXXXX" | null,
"name": "<group name or null>",
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>"
} | null,
"count": <number of software objects>,
"software": [
{
"attack_id": "SXXXX or similar" | null,
"name": "<software name>",
"stix_id": "<STIX ID>",
"type": "<malware|tool|...>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "uses",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of software>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| group_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the underlying mechanism (following 'uses' relationships) and provides a complete return format including group, count, software with nested relationships. Missing potential constraints like pagination or performance, but still excellent transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: purpose first, then method, parameters, and full return spec. The output schema is thorough but a bit verbose. However, the detail is appropriate for a complex data retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex return format and 0% parameter descriptions, the tool definition provides everything an agent needs: purpose, usage context, all parameter details, and a complete output schema. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It clearly explains each parameter: group_stix_id with example UUID, domain with allowed values, include_description with boolean purpose. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all software (malware and tools) used by a specific APT group, identified by its STIX ID.' This is a specific verb-resource combination that effectively distinguishes it from siblings like get_all_software, get_groups_using_software, and get_software_used_by_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains it follows 'uses' relationships from intrusion set to software and lists parameters, but does not explicitly state when to use this tool vs alternatives like get_groups_using_software or get_software_used_by_campaign. Given many sibling tools, some guidance on selection would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_software_using_techniqueA
Get all software (malware/tools) that use a specific technique.
This is a reverse lookup: Technique → Software.
It follows 'uses' relationships from a technique STIX ID to software
(malware and tools) that implement or leverage that technique.
Args:
technique_stix_id: STIX ID of the technique
(e.g., "attack-pattern--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include software descriptions.
Returns:
{
"technique": {
"attack_id": "TXXXX or TXXXX.YYY" | null,
"name": "<technique name or null>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
} | null,
"count": <number of software objects>,
"software": [
{
"attack_id": "SXXXX or similar" | null,
"name": "<software name>",
"stix_id": "<software STIX ID>",
"type": "<malware|tool|...>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "uses",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of software>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description provides full behavioral disclosure of output structure including relationships array. It does not mention safety or performance, but as a read query, the detailed return format is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear Args and Returns sections. First sentence is front-loaded. Slightly long due to detailed output example, but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for the tool's complexity: covers purpose, all parameters, and full return structure. Even provides an example output, which compensates for no output schema in metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, description explains all three parameters (technique_stix_id, domain with allowed values, include_description) with types and examples, adding meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with clear statement: 'Get all software (malware/tools) that use a specific technique.' It specifies reverse lookup and direction, distinguishing from siblings like get_techniques_used_by_software.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly states technique-to-software direction and that it follows 'uses' relationships. While no explicit when-not-to-use or alternatives, the context is clear and the sibling list shows differentiated tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsA
Get basic statistics about the loaded ATT&CK data for a given domain.
This returns counts of key object types (techniques, groups, software,
tactics, mitigations), excluding revoked/deprecated entries.
Args:
domain: ATT&CK domain ("enterprise", "mobile", "ics").
Returns:
{
"domain": "<domain>",
"stats": {
"techniques": <int>,
"groups": <int>,
"software": <int>,
"tactics": <int>,
"mitigations": <int>
},
"message": "<status message>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that revoked/deprecated entries are excluded and details the return format, providing behavioral context beyond the input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (description, args, returns) and front-loaded with the main purpose. It could be slightly more concise but is clear and organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description fully covers the tool's behavior, parameter, and return structure. For a simple stats tool, no additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by listing possible domains ('enterprise', 'mobile', 'ics') and explaining the domain parameter, adding meaning missing from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get basic statistics about the loaded ATT&CK data for a given domain' and lists the specific object types counted (techniques, groups, etc.), distinguishing it from sibling tools that retrieve individual objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when aggregate counts are needed but does not explicitly state when to use this tool instead of alternatives like get_all_techniques. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stix_typeA
Determine the STIX object type for a given STIX ID.
This is useful when you have a raw STIX UUID (e.g.,
"attack-pattern--xxxx") but need to know whether it corresponds to a
technique, intrusion set, malware, tool, mitigation, data source, etc.
Args:
stix_id: The STIX UUID identifier to look up.
domain: ATT&CK domain ("enterprise", "mobile", "ics").
Returns:
{
"found": bool,
"stix_type": "<type string or null>",
"message": "<status message>"
}
Examples:
get_stix_type("attack-pattern--a62a8db3-f23a-4d8f-afd6-9dbc77e7813b")
→ "attack-pattern"
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| stix_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 the return format (found, stix_type, message) and gives an example. It does not discuss error handling or side effects, but for a simple lookup tool, the provided information 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with sections for purpose, usage, parameters, return value, and an example. It is front-loaded with the main purpose. Every sentence adds value without unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, no output schema (but description provides return format), and sibling tools that might overlap, the description is complete. It covers the tool's function, parameters, return structure, and a concrete example, ensuring an agent can invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage (no descriptions for properties), but the tool's description includes an 'Args' section that explains both parameters: stix_id (required, STIX UUID) and domain (optional, default 'enterprise'). The example further clarifies usage, fully compensating for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Determine the STIX object type for a given STIX ID.' It distinguishes from siblings by specifying that it only returns the type, not the full object, and gives context about when it's useful (e.g., STIX UUID like 'attack-pattern--xxxx').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: when you have a STIX ID and need to know its type. It does not mention alternatives or when not to use it, but the context is clear enough for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subtechniques_of_techniqueA
Get all subtechniques of a parent technique.
Args:
technique_stix_id: STIX UUID of the parent technique.
domain: ATT&CK domain.
include_description: Whether to include subtechnique descriptions.
Returns:
{
"parent": {
"stix_id": "...",
"attack_id": "...",
"name": "..."
},
"count": int,
"subtechniques": [
{
"attack_id": "...",
"name": "...",
"stix_id": "...",
"description": "..." | null
},
...
],
"formatted": "<multi-line string>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 indicates a read operation ('Get') and describes the return structure fully. However, it does not disclose any potential side effects, rate limits, or permissions required. For a read-only tool, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured as a Python docstring with clear Args and Returns sections. It is concise yet informative, with no unnecessary words. Every sentence adds value, and the return schema is provided without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (3 parameters, 1 required, no nested objects) and the presence of an output schema in the description, the description is fairly complete. It covers inputs, outputs, and behavior. However, it could be improved by mentioning any constraints or edge cases, such as what happens if the parent technique has no subtechniques.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It does so by explaining each parameter: technique_stix_id as 'STIX UUID of the parent technique', domain as 'ATT&CK domain', and include_description as 'Whether to include subtechnique descriptions'. This adds significant meaning beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get all subtechniques of a parent technique' clearly specifies the action (Get) and the resource (subtechniques of a parent technique). It distinguishes itself from siblings like 'get_all_subtechniques' and 'get_parent_technique_of_subtechnique' by explicitly targeting a parent technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It gives no context for when not to use it or which sibling tools to choose instead. The purpose is clear, but usage context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tactics_by_matrixA
Get all ATT&CK tactics belonging to a specific matrix.
Args:
matrix_stix_id: STIX ID of the matrix (e.g., x-mitre-matrix--UUID)
domain: ATT&CK domain ('enterprise', 'mobile', 'ics')
include_description: Whether to include tactic descriptions
Returns:
{
"found": bool,
"count": int,
"tactics": [
{
"name": "...",
"stix_id": "...",
"description": "...",
"attack_id": "TAxxxx" or null
}
],
"formatted": "<multiline string>",
"message": "..."
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| matrix_stix_id | Yes | ||
| include_description | No |
TDQS
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 describes the return format in detail, which is helpful. However, it does not disclose whether the tool is read-only, requires authentication, or has any side effects. For a straightforward read operation, this is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: a one-line summary followed by structured Args and Returns sections. Every sentence adds value, and the most critical information (the action) is front-loaded. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters and no output schema. The description fully covers the input parameters and provides a detailed return structure including types and field names. It explains the 'found' field and formatted output. Minor gap: no example of expected UUID format for matrix_stix_id, but overall complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the schema titles provide minimal meaning. The description compensates by explicitly explaining each parameter in the Args block (matrix_stix_id, domain, include_description), including default values and expected format hints. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all ATT&CK tactics'), the resource ('tactics'), and the constraint ('belonging to a specific matrix'). This distinguishes it from sibling tools like get_all_tactics (no filter) and get_tactics_by_technique (different filter).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it. There is no mention of prerequisites or fallback options. Given the many sibling tools, this lack of guidance is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tactics_by_techniqueA
Get all tactics associated with a specific ATT&CK technique.
Techniques can belong to one or more tactics (kill chain phases).
Args:
technique_stix_id: Technique STIX UUID identifier (attack-pattern--UUID)
domain: ATT&CK domain ('enterprise', 'mobile', 'ics')
include_description: Whether to include tactic descriptions
Returns:
{
"found": bool,
"count": int,
"tactics": [
{
"name": "...",
"stix_id": "...",
"attack_id": "TAxxxx" or null,
"description": "...",
}
],
"formatted": "<multiline formatted output>",
"message": "..."
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_stix_id | Yes | ||
| include_description | No |
TDQS
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 states the tool returns all tactics and includes the output structure with a 'found' flag for missing techniques. It does not mention any side effects, but as a read-only operation this is acceptable. However, it could be more explicit about the behavior when no technique is found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise. It uses two short paragraphs and a clear Args/Returns structure. Every sentence adds information without redundancy. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a detailed return structure. It covers the three parameters and the overall purpose. It lacks guidance on when to use this over similar sibling tools, but for its own functionality it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description is the sole source. Each parameter is described with its type and purpose: technique_stix_id includes the expected UUID format, domain lists valid values, and include_description explains its boolean meaning. Defaults are not repeated but are implied by the schema. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves tactics for a specific technique. The verb 'get' and resource 'tactics' are specific. However, it does not explicitly distinguish from the very similar sibling 'get_technique_tactics', which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_technique_tactics' or 'get_techniques_by_tactic'. There are no exclusions or context-specific recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_technique_by_idA
" Retrieve a MITRE ATT&CK technique by its external ATT&CK ID (e.g., "T1055", "T1053.005").
This tool searches the specified ATT&CK domain (enterprise, mobile, or ics)
and returns both structured machine-readable data and an optional formatted
human-readable text block. It is useful for user-facing responses as well
as downstream programmatic reasoning.
Args:
technique_id: The external ATT&CK technique ID (e.g., "T1055").
domain: ATT&CK domain to search in ("enterprise", "mobile", "ics").
include_description: If True, returns the full ATT&CK description text.
Returns:
{
"found": bool,
"technique": {
"id": "<ATT&CK ID>",
"name": "<technique name>",
"stix_id": "<STIX object ID>",
"description": "<full description or null>"
},
"formatted": "<human-readable formatted block>",
"message": "<status message>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behaviors. It specifies the tool searches enterprise, mobile, and ICS domains and returns optional description and formatted text. It does not mention side effects or auth, but the read-only nature is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concisely structured with a summary, then a detailed paragraph, followed by Args and Returns sections. Every sentence provides value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no enums, and an output schema present, the description is complete. It covers purpose, parameters, and return format, and is self-contained for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 fully. It explains all three parameters (technique_id, domain, include_description) with examples and default values, and details the return structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a MITRE ATT&CK technique by external ID, provides an example, and distinguishes from sibling tools like get_all_techniques or get_techniques_by_tactic by specifying it fetches a single technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains it is useful for user-facing responses and programmatic reasoning, but does not explicitly state when not to use it or suggest alternatives. It implicitly guides usage by describing the function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_by_platformA
Get all ATT&CK techniques that apply to a specific platform.
Args:
platform: Platform name (e.g., 'Windows', 'Linux', 'macOS',
'Cloud', 'Azure AD', 'Network', etc.)
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Whether to include technique descriptions.
Returns:
{
"platform": "<platform>",
"count": <number>,
"techniques": [
{
"attack_id": "Txxxx" or "Txxxx.xxx" or null,
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>"
},
...
],
"formatted": "<optional formatted string>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| platform | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must bear the full burden. It implies a read-only operation via 'Get' and documents return format, but does not disclose authentication needs, rate limits, or side effects. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a header sentence, parameter list, and return schema. It is informative without unnecessary fluff, though the return schema is somewhat lengthy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and presence of an output schema (documented in description), the description covers purpose, parameters, and return format. It lacks error handling or rate limit info, but is sufficient for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds detailed parameter documentation: platform examples, domain values, and include_description semantics. This significantly compensates for the schema gap, though it could provide more constraint information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all ATT&CK techniques that apply to a specific platform,' using a specific verb and resource. It differentiates from sibling tools like get_technique_by_id or get_techniques_by_tactic by focusing on platform filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_techniques_by_tactic or search_techniques. It does not specify prerequisites or excluded use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_by_tacticA
Get all techniques associated with a specific ATT&CK tactic.
This uses the MITRE ATT&CK Navigator-style mapping between tactics and
techniques for a given domain (e.g., "enterprise-attack").
Examples:
- get_techniques_by_tactic("Initial Access", "enterprise")
- get_techniques_by_tactic("Execution", "enterprise")
- get_techniques_by_tactic("Persistence", "enterprise")
Args:
tactic: Tactic name (e.g., "Initial Access", "Persistence").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include technique descriptions
in the structured and formatted output.
Returns:
{
"count": <number of techniques>,
"techniques": [
{
"attack_id": "<TXXXX or TXXXX.YYY>",
"name": "<technique name>",
"stix_id": "<attack-pattern--...>",
"description": "<description or null>",
"tactic": "<tactic name>",
},
...
],
"formatted": "<human-readable technique list>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| tactic | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It does not mention side effects, permissions, rate limits, or safety profile. While the return schema is given, the agent learns nothing about destructive potential or required access levels for this read-like operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence summary, a contextual line about Navigator mapping, three clear examples, then bulleted Args and Returns. Every line adds value without redundancy. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters and an output schema provided, the description covers the essential information. The examples are helpful. It could be enhanced by noting that it requires an internet connection or that results are based on the latest ATT&CK release, but current completeness is good.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description's docstring fully documents each parameter: tactic (string), domain (with default 'enterprise' and allowed values implied), and include_description (boolean, default true). This adds significant meaning beyond the bare JSON schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb-resource pair ('Get all techniques associated with a specific ATT&CK tactic') and explicitly names the resource (tactic). It distinguishes from siblings like get_all_techniques and get_techniques_by_platform by focusing on tactic-based retrieval, and the examples reinforce this specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage examples for common tactics but does not explicitly state when to use this tool versus alternatives (e.g., search_techniques, get_techniques_by_platform). The mention of 'Navigator-style mapping' hints at a specific underlying data structure but lacks explicit guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_detected_by_datacomponentA
Get all techniques that can be detected by a specific data component.
Shows which adversary techniques can be identified by monitoring
this specific aspect of telemetry.
Args:
datacomponent_stix_id: Data component STIX UUID identifier
(e.g., 'x-mitre-data-component--UUID').
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Whether to include technique descriptions.
Returns:
{
"datacomponent": {
"name": "<data component name or null>",
"stix_id": "<x-mitre-data-component--UUID>",
"description": "<text or null>",
"data_source_stix_id": "<x-mitre-data-source--UUID or null>",
"data_source_name": "<data source name or null>",
"data_source_attack_id": "<data source ATT&CK ID or null>",
} | null,
"count": <number of techniques>,
"techniques": [
{
"attack_id": "Txxxx or Txxxx.xxx" | null,
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
},
...
],
"formatted": "<human-readable list of techniques>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| include_description | No | ||
| datacomponent_stix_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It includes the return format and example STIX ID, but does not disclose other behavioral aspects such as authentication requirements, rate limits, or side effects. It does not contradict any annotations (none present).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief purpose statement, a clarifying sentence, and clearly labelled Args and Returns sections. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 parameters, detailed output schema), the description provides a complete output schema and parameter details. However, it lacks usage guidelines and some parameter constraints, making it good but not fully comprehensive for a standalone tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides meaning beyond the input schema by explaining each parameter in the Args section: datacomponent_stix_id with an example format, domain with default value, and include_description as a boolean. However, it does not enumerate domain options, and the coverage of schema descriptions is 0%, so the description compensates well but could be more precise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all techniques that can be detected by a specific data component') and specifies the resource (techniques detected by a data component). It distinguishes itself from siblings like 'get_datacomponents_detecting_technique' which is the reverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (e.g., when you need techniques for a specific data component) but does not provide explicit guidance on when to use this tool versus alternatives like 'get_all_techniques' or 'get_techniques_by_tactic'. No when-not or exclusion conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_mitigated_by_mitigationA
Get all techniques mitigated by a specific mitigation (by STIX ID).
Args:
mitigation_stix_id: STIX UUID of the mitigation (e.g., course-of-action--UUID).
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Include technique descriptions in the output.
Returns:
{
"found": bool,
"mitigation": {
"attack_id": "...",
"name": "...",
"stix_id": "course-of-action--..."
} | null,
"count": int,
"techniques": [
{
"attack_id": "Txxxx",
"name": "...",
"stix_id": "...",
"description": "...",
},
...
],
"formatted": "<multi-line text>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| mitigation_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 the return structure including fields like 'found', 'mitigation', 'count', 'techniques', 'formatted', and 'message'. It does not mention error handling, rate limits, or pagination, but for a simple query tool the behavioral information is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a brief one-sentence purpose followed by structured Args and Returns sections. It is front-loaded and contains no redundant information, though the Python docstring format could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, required output schema present), the description is complete. It covers input details, output structure, and examples. There are no missing elements for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, but the description compensates by explaining each parameter: mitigation_stix_id (STIX UUID format), domain (with explicit examples 'enterprise', 'mobile', 'ics'), and include_description (boolean). This adds significant meaning beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Get all techniques mitigated by a specific mitigation (by STIX ID).' It uses a specific verb ('Get') and resource ('techniques mitigated by mitigation'), and the name distinguishes it from the sibling tool 'get_mitigations_mitigating_technique' which does the reverse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. The usage is implied by the name and parameters, but there is no direct guidance on when-not-to-use or alternatives like 'get_mitigations_mitigating_technique'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_targeting_assetA
Get all techniques that target a specific ICS asset.
Shows which adversary techniques can affect a given industrial
control system component.
Args:
asset_stix_id: STIX ID of the ICS asset
domain: Domain (default: 'ics')
include_description: Whether to include descriptions in formatted output
Returns:
{
"found": bool,
"count": int,
"techniques": [
{
"id": "<ATT&CK ID>",
"name": "...",
"stix_id": "...",
"description": "..." | None
},
...
],
"formatted": "<optional pretty text>",
"message": "..."
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | ics | |
| asset_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose behavioral traits such as idempotency, data freshness, authentication requirements, or side effects. The verb 'get' implies read-only, but this is not explicitly stated. The return format is described but that is expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a short summary, an Args section, and a Returns section. It is concise without unnecessary detail, though the Returns section could be more integrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema in the description and the existence of sibling tools, the description is largely complete. It lacks guidance on when to use this tool over its reverse counterpart, but the core functionality and return structure are well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful information beyond the schema for all three parameters: it explains 'asset_stix_id' as the STIX ID of the ICS asset, 'domain' with default 'ics', and 'include_description' as whether to include descriptions. This compensates for the schema's minimal titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get all techniques that target a specific ICS asset' and elaborates with 'Shows which adversary techniques can affect a given industrial control system component.' This specific verb-resource combination distinguishes it from sibling tools like 'get_assets_targeted_by_technique' and 'get_all_techniques'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating the function, but does not explicitly contrast with siblings like the reverse tool 'get_assets_targeted_by_technique' or provide when-not-to-use context. The presence of siblings in the list does not compensate for lack of explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_used_by_campaignA
Get all techniques used in a specific campaign.
Args:
campaign_stix_id: Campaign STIX UUID identifier
(e.g., 'campaign--UUID').
domain: ATT&CK domain ('enterprise', 'mobile', 'ics').
include_description: Whether to include technique descriptions.
Returns:
{
"campaign": {
"attack_id": "CXXXX" | null,
"name": "<campaign name or null>",
"stix_id": "<campaign--UUID>",
"description": "<text or null>",
} | null,
"count": <number of techniques>,
"techniques": [
{
"attack_id": "TXXXX or TXXXX.YYY" | null,
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
"tactics": ["<Tactic 1>", "<Tactic 2>", ...],
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "<type>",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of techniques>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| campaign_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 details the return structure comprehensively, including nested fields like relationships. However, it omits discussion of permissions, rate limits, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with Args and Returns sections. It is moderately long due to the detailed return schema, but each sentence provides necessary information. Some redundancy with the output schema is acceptable given its absence in the prompt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, parameters, and return structure comprehensively. It lacks mention of edge cases or potential errors, but given the tool's simplicity and the presence of an output schema, it is sufficient for accurate selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides clear parameter explanations in the Args section, including type, purpose, and defaults (e.g., 'campaign_stix_id: Campaign STIX UUID identifier'). This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get all techniques used in a specific campaign', which is a clear verb+resource pairing. It distinguishes from sibling tools like get_techniques_used_by_group by explicitly targeting campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool vs alternatives such as get_techniques_used_by_group or the inverse get_campaigns_using_technique. Users must infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_used_by_groupA
Get all techniques used by a specific APT group, identified by its STIX ID.
This is similar to `get_group_techniques`, but instead of a group name or
alias it takes the group's STIX UUID (e.g. "intrusion-set--..."), which is
useful when you already have the STIX ID from another query or relationship.
Args:
group_stix_id: STIX ID of the group (intrusion-set--UUID).
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include technique descriptions.
Returns:
{
"group": {
"attack_id": "GXXXX" | null,
"name": "<group name or null>",
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>"
} | null,
"count": <number of techniques>,
"techniques": [
{
"attack_id": "TXXXX or TXXXX.YYY" | null,
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "uses",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>"
},
...
]
},
...
],
"formatted": "<human-readable technique list>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| group_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the return structure comprehensively, including null fields and example values. Lacks mention of potential errors, rate limits, or side effects, but for a read query the output transparency is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points for return format. Front-loaded with purpose. Each sentence adds value without redundancy. Concise given the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, detailed output), the description fully explains inputs, defaults, and return structure. Comprehensive without being verbose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, description fully compensates by explaining each parameter: `group_stix_id` format, `domain` default, `include_description` default, and the expected STIX ID pattern. Adds essential meaning beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get), resource (techniques used by group), and distinguishes from sibling tool `get_group_techniques` by specifying use of STIX ID instead of name. Purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly compares to `get_group_techniques` and advises using this tool when STIX ID is known. While it doesn't list when not to use, it provides clear context for choosing this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_used_by_group_softwareA
Get techniques used by the software that a group uses (Group → Software → Techniques).
This provides an indirect view of a group's capabilities by following:
Group (intrusion set) → Software (malware/tools) → Techniques
Args:
group_stix_id: STIX ID of the group (e.g., "intrusion-set--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include technique descriptions.
Returns:
{
"group": {
"attack_id": "GXXXX" | null,
"name": "<group name or null>",
"stix_id": "<intrusion-set--UUID>",
"description": "<text or null>",
} | null,
"count": <number of techniques>,
"techniques": [
{
"attack_id": "TXXXX or TXXXX.YYY" | null,
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "uses",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of techniques>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| group_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It details the return structure, the chain of relationships, and parameter behavior. It does not explicitly state read-only, but the content implies query behavior. No contradictions with annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, chain explanation, Args section, and Returns section. It is front-loaded with the purpose. Minor redundancy (chain explained twice) but overall clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (indirect query with nested relationships), the description provides a complete picture. It covers all return fields (group, techniques, relationships, count, formatted, message) and each parameter. Output schema exists, but the description adds value by explaining the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by explaining each parameter: group_stix_id (with STIX ID example), domain (listing valid values: enterprise, mobile, ics), and include_description (boolean). This adds significant meaning beyond the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get techniques used by the software that a group uses' and explains the indirect chain Group→Software→Techniques. It distinguishes from siblings like get_techniques_used_by_group (direct view) and get_software_used_by_group, as implied by the 'indirect view' wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use this tool (for an indirect view via software) but does not explicitly name alternatives or state when not to use it. It implies a distinction from direct views but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_techniques_used_by_softwareA
Get all techniques used by specific software/malware.
This shows what ATT&CK techniques a given software (tool/malware) is
capable of performing.
Args:
software_stix_id: STIX ID of the software object
(e.g., "malware--UUID", "tool--UUID").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include technique descriptions.
Returns:
{
"software": {
"attack_id": "SXXXX or similar" | null,
"name": "<software name or null>",
"stix_id": "<software STIX ID>",
"type": "<malware|tool|...> or null",
"description": "<text or null>",
} | null,
"count": <number of techniques>,
"techniques": [
{
"attack_id": "TXXXX or TXXXX.YYY" | null,
"name": "<technique name>",
"stix_id": "<attack-pattern--UUID>",
"description": "<text or null>",
"relationships": [
{
"stix_id": "<relationship--UUID>",
"relationship_type": "uses",
"description": "<relationship description or null>",
"source_ref": "<source STIX ID>",
"target_ref": "<target STIX ID>",
},
...
]
},
...
],
"formatted": "<human-readable list of techniques>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| software_stix_id | Yes | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully reveals the tool's behavior by detailing the output structure, including relationships and formatted responses. However, it does not explicitly state that the operation is read-only or free of side effects, which could be inferred but is not guaranteed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence, followed by detailed parameter and return documentation. It is somewhat lengthy due to the complete output schema, but every section serves a purpose. Minor redundancy could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description thoroughly covers the input parameters and output schema, making it easy for an agent to understand the return value. It lacks information on error handling or edge cases (e.g., invalid STIX ID), but given the presence of an output schema and detailed docstring, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description compensates by explaining each parameter in the 'Args' section: software_stix_id with examples, domain with allowed values, and include_description with a clear boolean intent. This adds significant meaning beyond the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all techniques used by a specific software/malware. The verb 'Get' and resource 'techniques' with qualifier 'used by software' precisely defines its purpose and distinguishes it from sibling tools that retrieve techniques for groups or campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not explicitly guide when to use it versus alternatives like get_techniques_used_by_group or get_groups_using_technique. While the purpose is clear, the absence of usage context or exclusions leaves room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_technique_tacticsA
Get the ATT&CK tactic names associated with a given technique.
This tool:
1) Looks up a technique by its external ATT&CK ID (e.g., "T1055").
2) Extracts its kill chain phases (tactics) from the STIX object.
3) Returns human-readable tactic names (e.g., "Initial Access"),
along with the raw phase names and kill chain names.
Args:
technique_id: External ATT&CK technique ID (e.g., "T1055", "T1055.002").
domain: ATT&CK domain ("enterprise", "mobile", "ics").
Returns:
{
"found": bool,
"technique": {
"id": "<ATT&CK ID>",
"name": "<technique name or null>",
"stix_id": "<attack-pattern--... or null>",
} | null,
"tactics": [
{
"tactic": "<Human readable, e.g., 'Initial Access'>",
"phase_name": "<raw phase name, e.g., 'initial-access'>",
"kill_chain_name": "<kill chain name, e.g., 'mitre-attack'>"
},
...
],
"message": "<status message>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | enterprise | |
| technique_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the steps (lookup by ID, extract phases, return names) and the return format, but does not disclose behavior for edge cases (e.g., technique not found, invalid ID). With no annotations, the description carries the burden, and it partially addresses transparency but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (brief intro, steps, Args, Returns). It is informative without being overly verbose, though it could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers input parameters and return structure adequately. It includes a message field for status but does not detail error handling or performance characteristics, keeping it reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite the reported 0% schema coverage, the description adds significant meaning: it specifies the format of technique_id with examples and enumerates the allowed domains. This compensates for the schema's minimal information and provides actionable guidance for parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves tactic names for a given ATT&CK technique. However, it does not distinguish itself from the sibling tool 'get_tactics_by_technique', which likely serves the same purpose. Therefore, while purpose is clear, differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like 'get_tactics_by_technique' or 'get_techniques_by_tactic'. The description lacks context for optimal usage, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_groupsA
Search MITRE ATT&CK intrusion sets (APT groups) by name, alias, or
description (case-insensitive).
If the query is empty, all groups in the domain are returned.
Args:
query: Search keyword (name, alias, or any text in the description).
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include descriptions in the output.
Returns:
{
"count": <number of matches>,
"groups": [
{
"attack_id": "GXXXX",
"name": "...",
"aliases": [...],
"stix_id": "...",
"description": "..." | null
},
...
],
"formatted": "<LLM-friendly block>",
"message": "<summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It transparently explains search behavior, parameter effects, and return format. It does not mention any destructive side effects (none expected) or authentication needs, but is sufficient for a read-only search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with a clear purpose sentence and an 'Args' section. It is front-loaded and concise, with every sentence adding necessary information. No redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description includes a detailed output schema, covering all return fields. It specifies behavior for empty queries and case-insensitivity. Given the output schema in the description, the agent has complete information to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds full meaning for each parameter: query (search keyword), domain (ATT&CK domain), include_description (toggle). Default values and types are explained, providing essential context beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches MITRE ATT&CK intrusion sets by name, alias, or description, case-insensitive. It distinguishes itself from siblings like 'get_all_groups' (returns all) and 'get_group_by_name' (exact match) by specifying search functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching, but lacks explicit guidance on when to use this tool versus alternatives like 'get_group_by_name' or 'get_all_groups'. No mention of when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_softwareA
Search MITRE ATT&CK software (malware & tools) by keyword in name or
description (case-insensitive).
Args:
query: Keyword to search for in software names and descriptions.
domain: ATT&CK domain ("enterprise", "mobile", "ics").
include_description: Whether to include descriptions in the response.
Returns:
{
"count": <number of matches>,
"software": [
{
"attack_id": "<SXXXX or similar>",
"name": "...",
"stix_id": "...",
"type": "<tool|malware|...>",
"description": "..." | null
},
...
],
"formatted": "<nicely formatted block>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains case-insensitive keyword search, lists arguments, and details the return structure. However, it does not specify whether search is fuzzy or exact, or if it supports multiple keywords, leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear front-loaded purpose sentence followed by structured Args and Returns sections. Every sentence adds value; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple search tool with output schema, the description covers key aspects: all parameters and return format. It lacks details on search behavior (e.g., substring matching) and error handling, but remains adequate for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an 'Args' section explaining each parameter's purpose: query (keyword), domain (ATT&CK domain), include_description (include descriptions). This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Search MITRE ATT&CK software (malware & tools) by keyword in name or description (case-insensitive).' It identifies the resource (software) and the operation (keyword search), distinguishing it from siblings like 'search_groups' and 'search_techniques'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for keyword-based searching but does not explicitly state when to use this tool versus alternatives like 'get_all_software' or 'get_software'. No exclusions or alternative suggestions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_techniquesA
Search MITRE ATT&CK techniques by keyword in their name or description.
This tool performs a case-insensitive search over all non-revoked,
non-deprecated techniques in the given domain. A technique is matched if
the query string appears in either:
• the technique name, or
• the technique description
Examples:
- search_techniques("PowerShell")
- search_techniques("credential dumping")
- search_techniques("initial access", domain="enterprise")
Args:
query: Text to search for in technique names and descriptions.
domain: ATT&CK domain ("enterprise", "mobile", or "ics").
include_description: Whether to include descriptions in the structured
result and formatted output.
Returns:
{
"count": <number of matches>,
"techniques": [
{
"attack_id": "<TXXXX or TXXXX.YYY>",
"name": "<technique name>",
"stix_id": "<attack-pattern--...>",
"description": "<description or null>",
},
...
],
"formatted": "<human-readable formatted list>",
"message": "<status summary>"
}
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| domain | No | enterprise | |
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It clearly states the tool's behavior: case-insensitive search, only non-revoked/non-deprecated techniques, matches in name or description, and returns a structured result with count, techniques list, formatted output, and message. It does not mention any destructive behavior or limitations, but it is transparent about the search criteria and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections, bullet points, examples, and a return value specification. It is concise and contains no unnecessary information, each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no annotations, and an output schema, the description is complete. It covers purpose, usage guidelines, behavioral details, parameter semantics, and return format. It is a model description for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 fully describes all three parameters: query (text to search), domain (enterprise, mobile, or ics with default), and include_description (boolean, default true). It also provides examples and explains the return value structure, adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches MITRE ATT&CK techniques by keyword in name or description. It distinguishes from sibling tools like get_all_techniques (which returns all techniques) and other search tools (search_groups, search_software) by being specific to techniques and providing a keyword search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool performs a case-insensitive search over non-revoked, non-deprecated techniques. It provides examples and specifies the domain parameter. While it does not explicitly state when not to use it, the context of sibling tools implies alternatives, and the description gives clear guidance on its use.
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.
65 tool updates
v0.1.3- First observed
generate_layer - First observed
get_all_assets - First observed
get_all_campaigns - First observed
get_all_datacomponents - First observed
get_all_datasources - First observed
get_all_groups - First observed
get_all_matrices - First observed
get_all_mitigations - First observed
get_all_parent_techniques - First observed
get_all_software - First observed
get_all_subtechniques - First observed
get_all_tactics - First observed
get_all_techniques - First observed
get_assets_targeted_by_technique - First observed
get_attack_id - First observed
get_campaigns_attributed_to_group - First observed
get_campaigns_by_alias - First observed
get_campaigns_using_software - First observed
get_campaigns_using_technique - First observed
get_data_stats - First observed
get_datacomponents_detecting_technique - First observed
get_group_by_name - First observed
get_group_techniques - First observed
get_groups_attributing_to_campaign - First observed
get_groups_by_alias - First observed
get_groups_using_software - First observed
get_groups_using_technique - First observed
get_layer_metadata - First observed
get_mitigations_mitigating_technique - First observed
get_name - First observed
get_object_by_attack_id - First observed
get_object_by_stix_id - First observed
get_objects_by_content - First observed
get_objects_by_name - First observed
get_objects_by_type - First observed
get_objects_created_after - First observed
get_objects_modified_after - First observed
get_parent_technique_of_subtechnique - First observed
get_procedure_examples_by_tactic - First observed
get_procedure_examples_by_technique - First observed
get_revoked_techniques - First observed
get_software - First observed
get_software_by_alias - First observed
get_software_used_by_campaign - First observed
get_software_used_by_group - First observed
get_software_using_technique - First observed
get_stats - First observed
get_stix_type - First observed
get_subtechniques_of_technique - First observed
get_tactics_by_matrix - First observed
get_tactics_by_technique - First observed
get_technique_by_id - First observed
get_technique_tactics - First observed
get_techniques_by_platform - First observed
get_techniques_by_tactic - First observed
get_techniques_detected_by_datacomponent - First observed
get_techniques_mitigated_by_mitigation - First observed
get_techniques_targeting_asset - First observed
get_techniques_used_by_campaign - First observed
get_techniques_used_by_group - First observed
get_techniques_used_by_group_software - First observed
get_techniques_used_by_software - First observed
search_groups - First observed
search_software - First observed
search_techniques
TDQS
Each tool targets a distinct ATT&CK entity or relationship. No two tools have identical purposes; even closely related tools differ by input parameters or entity type, ensuring clear separation.
Most tools follow a consistent 'verb_noun' pattern (e.g., get_all_*, search_*, generate_layer). A minor inconsistency exists with both 'get_software' and 'get_all_software' having overlapping functionality, but overall the naming is predictable.
65 tools is high but appropriate for the comprehensive ATT&CK framework. The tool set covers many entity types and relationships, though some consolidation could reduce redundancy without losing functionality.
The tool set covers all major ATT&CK entities (techniques, groups, software, campaigns, etc.) and their relationships, plus utility tools for layer generation, search, and object resolution. No obvious gaps in the surface.
Maintenance
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
Query and retrieve information about various adversarial tactics and techniques used in cyber atta…
AI-security knowledge as MCP: standards-mapped tools (OWASP, NIST, MITRE) for AI agents.
Real-time threat intel for AI agents: 890K+ IOCs incl. prompt-injection & AI-skill threats
Real-time CVE, exploit, and vulnerability intelligence for AI assistants (350K+ CVEs, 115K+ PoCs)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying the MITRE ATT\&CK framework for adversarial tactics, techniques, mitigations, and detection methods through natural language, supporting both ID-based and fuzzy name-based searches.3-
- FlicenseBqualityDmaintenanceProvides comprehensive access to the MITRE ATT\&CK knowledge base with 50+ tools for querying threat actors, malware, and techniques, including automatic ATT\&CK Navigator layer generation for threat analysis and visualization.5543-
- FlicenseNot gradedqualityDmaintenanceProvides threat intelligence and vulnerability research tools by integrating with NVD, VirusTotal, AbuseIPDB, Shodan, and MITRE ATT\&CK. It enables users to perform CVE lookups, analyze IP reputation, and retrieve detailed MITRE ATT\&CK technique information.1-
- AlicenseAqualityCmaintenanceExposes the MITRE ATT\&CK framework to LLMs and AI assistants via the Model Context Protocol, enabling querying of techniques, tactics, groups, software, and mitigations.913MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/imouiche/complete-mitre-attack-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server