Skip to main content
Glama

mitre-mcp: MITRE ATT&CK MCP Server

MCP Registry

PyPI version Python versions Test status License Coverage Code style: black Pre-commit

Production-ready Model Context Protocol (MCP) server that exposes the MITRE ATT&CK® framework to LLMs, AI assistants, and automation workflows. Built with the official MCP Python SDK and mitreattack-python library for secure, high-performance access to adversary tactics, techniques, groups, software, and mitigations.

Available in the MCP Registry (search for io.github.luongnv89/mitre-mcp).

Highlights

  • LLM-native experience – Seamless integration with Claude, Windsurf, Cursor, and any MCP-compatible client

  • Secure-by-default – Validated inputs, TLS verification, disk-space checks, and structured error handling

  • High performance – O(1) technique lookups using pre-built indices (80-95% faster than scanning)

  • Flexible deployment – stdio for local clients or HTTP server for web-based integrations

Related MCP server: MITRE ATT&CK MCP Server

Table of Contents

Features

  • Comprehensive MITRE ATT&CK Coverage - All techniques, tactics, groups, software, and mitigations

  • Multi-Domain Support - Enterprise, Mobile, and ICS ATT&CK domains

  • Intelligent Caching - Automatic caching with configurable expiry (default: 24 hours)

  • Performance Optimized - O(1) lookups using pre-built indices (80-95% faster)

  • Dual Transport Modes - stdio for local clients, HTTP for web integrations

  • CORS-Enabled HTTP Server - Async notifications and cross-origin request support

  • Comprehensive Testing - 114 tests with 66% code coverage

  • Pre-commit Quality Checks - Automated formatting, linting, type checking, and security scanning

  • Input Validation - Secure-by-default with validated inputs and sanitized responses

  • Programmatic API - Python and Node.js clients (see API-INTEGRATION.md)

Available MCP Tools

Tool Name

Description

get_techniques

List all techniques with filtering options

get_technique_by_id

Look up specific technique by ID (e.g., T1055)

get_techniques_by_tactic

Get techniques for a specific tactic (e.g., persistence)

get_tactics

List all tactical categories

get_groups

List all threat actor groups

get_techniques_used_by_group

Get techniques used by a specific group (e.g., APT29)

get_software

List malware and tools with filtering

get_mitigations

List all security mitigations

get_techniques_mitigated_by_mitigation

Get techniques addressed by a specific mitigation

Quick Start

Installation

  1. Create and activate a virtual environment:

python3 -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate.bat
  1. Install from PyPI:

pip install mitre-mcp
  1. Verify installation:

mitre-mcp --help

Start the server:

mitre-mcp --http

Expected output:

2025-11-17 22:40:10,991 - mitre_mcp.mitre_mcp_server - INFO - Starting MITRE ATT&CK MCP Server (HTTP mode on localhost:8000)
======================================================================
MCP Client Configuration (Streamable HTTP Transport)
Server URL: http://localhost:8000
MCP Endpoint: http://localhost:8000/mcp

Add this to your MCP client configuration:
{
  "mcpServers": {
    "mitreattack": {
      "url": "http://localhost:8000/mcp"
    }
  }
}
======================================================================

Configure your MCP client:

Add this JSON to your client's configuration file:

{
  "mcpServers": {
    "mitreattack": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

Configuration file locations:

  • macOS (Claude Desktop): ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows (Claude Desktop): %APPDATA%\Claude\claude_desktop_config.json

  • Linux (Claude Desktop): ~/.config/Claude/claude_desktop_config.json

  • VSCode: Configure in your MCP extension settings

Custom host and port:

mitre-mcp --http --host 0.0.0.0 --port 8080

Then use http://your-server-ip:8080/mcp in your client configuration.

Why HTTP mode?

  • Multiple clients can connect simultaneously

  • Better concurrency and async support

  • Easier debugging with HTTP tools

  • CORS support for web-based clients

  • No path configuration needed

stdio Mode (Alternative)

For local-only clients that require stdio transport:

mitre-mcp

Client configuration:

{
  "mcpServers": {
    "mitreattack": {
      "command": "/absolute/path/to/.venv/bin/python",
      "args": ["-m", "mitre_mcp.mitre_mcp_server"]
    }
  }
}

Note: Use absolute paths. HTTP mode is recommended for most use cases.

Force Data Download

Force a fresh download of MITRE ATT&CK data:

mitre-mcp --http --force-download

Example Screenshots

VSCode Configuration:

Configure

Tool Invocation:

Tool call

Results:

Result

Web Frontend

A modern React-based web interface is available in the frontend/ directory for interactive exploration of MITRE ATT&CK through a chat interface.

Features:

  • Clean, minimal design with black/white/gray aesthetic

  • Interactive chatbox powered by LangGraphJS

  • Pre-built scenario playbooks for common security workflows

  • Real-time query processing with the MCP server

Quick Start:

cd frontend
npm install
npm run dev

Then open http://localhost:5173 in your browser.

Prerequisites:

  • Node.js 18+ installed

  • MCP server running: mitre-mcp --http --port 8000

For more details, see the frontend/README.md documentation.

Documentation

We provide three comprehensive guides tailored to different use cases:

1. Beginner's Guide

Beginner-Playbook.md - For those new to MITRE ATT&CK or cybersecurity

Ideal for:

  • Non-technical users

  • Security awareness training

  • Basic threat intelligence

  • General cybersecurity education

2. Advanced Playbook

Playbook.md - For security professionals using MCP clients

Ideal for:

  • Security analysts

  • Threat hunters

  • Incident responders

  • Security engineers

Includes 10 ready-to-use scenarios:

  • Threat Intelligence

  • Detection Engineering

  • Threat Hunting

  • Red Teaming

  • Security Assessment

  • Incident Response

  • Security Operations

  • Security Training

  • Vendor Evaluation

  • Risk Management

3. API Integration Guide

API-INTEGRATION.md - For developers building automation and custom integrations

Ideal for:

  • Backend developers

  • Automation engineers

  • Data pipeline developers

  • Custom tooling projects

Includes:

  • Complete Python and Node.js client implementations

  • Protocol requirements and examples

  • Testing and debugging tools

  • Common integration patterns

Configuration

Environment Variables

Set before starting mitre-mcp to customize behavior:

Variable

Default

Purpose

MITRE_ENTERPRISE_URL, MITRE_MOBILE_URL, MITRE_ICS_URL

Official MITRE CTI GitHub URLs

Override ATT&CK bundle locations or point to internal mirror

MITRE_DATA_DIR

mitre_mcp/data

Store cached bundles in custom directory

MITRE_DOWNLOAD_TIMEOUT

30

HTTP timeout in seconds for bundle downloads

MITRE_CACHE_EXPIRY_DAYS

1

Maximum age before cached data is refreshed

MITRE_REQUIRED_SPACE_MB

200

Disk space threshold checked before downloading

MITRE_DEFAULT_PAGE_SIZE / MITRE_MAX_PAGE_SIZE

20 / 1000

Default and maximum records returned by list tools

MITRE_MAX_DESC_LENGTH

500

Trimmed description length in responses

MITRE_LOG_LEVEL

INFO

Logging verbosity (DEBUG, INFO, WARNING, etc.)

MITRE_CORS_ORIGINS

*

CORS allowed origins for HTTP mode (* = all, or comma-separated list of domains)

Data Caching

The server automatically caches MITRE ATT&CK data to improve performance:

  1. On first run, downloads and stores data in data/ folder

  2. On subsequent runs, uses cached data if less than 1 day old

  3. Automatically refreshes data older than 1 day

  4. Use --force-download to force fresh download

Performance

Scenario

Improvement

Notes

Enterprise technique lookup

80-95% faster

Pre-built O(1) indices for groups, mitigations, and techniques

ATT&CK data downloads

20-40% faster

HTTP connection pooling with TLS session reuse

Warm cache startup

<2s

Cached bundles reused for instant LLM queries

Benchmarks: macOS 14 / Apple M3 Pro with Python 3.11. Use MITRE_LOG_LEVEL=DEBUG for timing logs.

Programmatic API

For automation, custom integrations, and batch processing, see API-INTEGRATION.md.

Quick example (Python):

from clients.python.mini_mcp_client import MitreMCPClient

async def main():
    client = MitreMCPClient(host="localhost", port=8000)

    # Get all tactics
    tactics = await client.call_tool("get_tactics", {"domain": "enterprise-attack"})

    # Get techniques for a group
    techniques = await client.call_tool(
        "get_techniques_used_by_group",
        {"group_name": "APT29", "domain": "enterprise-attack"}
    )

Available clients:

  • Python: clients/python/mini-mcp-client.py with full CLI

  • Node.js: clients/nodejs/mini-mcp-client.js with full CLI

See API-INTEGRATION.md for complete documentation.

Development

Clone and Install

git clone https://github.com/montimage/mitre-mcp.git
cd mitre-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Install Pre-commit Hooks

pre-commit install

This sets up automatic code quality checks before each commit.

Run Tests

pytest                      # Full test suite with coverage
pre-commit run --all-files  # All quality checks

Code Quality Tools

Formatting:

  • black - Python code formatter

  • isort - Import organizer

  • prettier - YAML/JSON/Markdown formatter

Linting & Type Checking:

  • flake8 - Python linter

  • mypy - Static type checker

  • pydocstyle - Docstring checker

Security:

  • bandit - Security vulnerability scanner

  • File validators - YAML, JSON, TOML, private key detection

Testing:

  • pytest - 114 tests before commit

  • Installation test - Package verification

  • Import verification - Module importability

  • CLI test - Entry point validation

Troubleshooting

Download fails with "Insufficient disk space"

  • Free at least 200 MB in the data directory or set MITRE_DATA_DIR=/path/to/storage

Data never updates

  • Cached bundles refresh automatically after 1 day

  • Force refresh: mitre-mcp --force-download or delete data/ folder

Tool calls return errors

  • Ensure technique IDs follow T#### or T####.### format

  • Keep names/tactics under 100 characters

MCP client cannot discover server

  • Verify client configuration points to correct Python path

  • Test manually: run mitre-mcp and verify server starts

  • For HTTP mode: ensure url field is set correctly

Module not found: mcp.server.fastmcp

  • Install MCP SDK: pip install "mcp[cli]" in your virtual environment

FAQ

Does mitre-mcp work offline?

  • Yes. Once bundles are cached, the server works offline until cache expires.

Which Python versions are supported?

  • Python 3.10 through 3.14 (see pyproject.toml).

How often is data refreshed?

  • By default every 24 hours. Adjust MITRE_CACHE_EXPIRY_DAYS or use --force-download.

Is HTTP mode safe for production?

  • HTTP mode serves on localhost:8000 by default. Use firewall or reverse proxy if exposing externally.

License

MIT License - See LICENSE file for details.

About Montimage

mitre-mcp is developed and maintained by Montimage, a cybersecurity company specializing in network monitoring, security analysis, and AI-driven threat detection solutions. We develop innovative tools that help organizations protect their digital assets and ensure network security.

For questions or support: luong.nguyen@montimage.eu

Available Tools

9 tools
get_groupsA

Get all groups from the MITRE ATT&CK framework.

Args: domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack) remove_revoked_deprecated: Remove revoked or deprecated objects

Returns: Dictionary containing a list of groups

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoenterprise-attack
remove_revoked_deprecatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description must convey behavioral traits. It indicates a read-only operation ('Get all groups') and specifies the return format. However, it does not mention potential side effects, authentication needs, or rate limits, which would be expected for a complete behavioral disclosure.

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

Conciseness5/5

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

The description is extremely concise: a one-line purpose followed by a structured Args/Returns block. Every sentence is necessary and front-loaded with the key action. No superfluous text.

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

Completeness5/5

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

Given the tool's simplicity (2 optional parameters) and the presence of an output schema, the description is complete. It explains the return type ('Dictionary containing a list of groups') and covers the parameters with their defaults and allowed values.

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

Parameters4/5

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

The schema covers 0% of parameter descriptions, but the description adds meaning by listing the valid domain values (enterprise-attack, mobile-attack, ics-attack) in parentheses, which is not present in the schema (which only specifies type string without enums). This adds significant value for parameter selection.

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

Purpose5/5

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

The description clearly states it gets all groups from the MITRE ATT&CK framework. The verb 'get' and resource 'groups' are specific, and it distinguishes from sibling tools which target different entities (mitigations, software, tactics, techniques).

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

Usage Guidelines4/5

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

The description provides clear context for usage, including optional parameters and return type. It does not explicitly state when not to use or alternatives, but siblings are distinct enough that confusion is unlikely.

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

get_mitigationsA

Get all mitigations from the MITRE ATT&CK framework.

Args: domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack) remove_revoked_deprecated: Remove revoked or deprecated objects

Returns: Dictionary containing a list of mitigations

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoenterprise-attack
remove_revoked_deprecatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as authentication needs, rate limits, error handling, or side effects. It only states the basic functionality and return type.

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

Conciseness5/5

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

The description is very concise: a single sentence plus a structured args section. No redundant or extraneous information.

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

Completeness4/5

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

The description covers the essential aspects: what the tool does, its parameters, and return type. However, given the absence of annotations, more context (e.g., read-only nature, typical use cases) could be beneficial for completeness.

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

Parameters4/5

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

With 0% schema description coverage, the description adds meaning by listing the two parameters (domain with possible values, remove_revoked_deprecated as boolean) and describing the return value. This compensates for the sparse schema.

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

Purpose5/5

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

The description clearly states 'Get all mitigations from the MITRE ATT&CK framework', specifying the verb (get), resource (mitigations), and source. It distinguishes from sibling tools that focus on other ATT&CK objects like groups, software, and techniques.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., get_techniques_mitigated_by_mitigation). No context on prerequisites or exclusions is given.

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 from the MITRE ATT&CK framework.

Args: domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack) remove_revoked_deprecated: Remove revoked or deprecated objects software_types: Optional list of ATT&CK object types to include (e.g., ["malware"])

Returns: Dictionary containing a list of software

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoenterprise-attack
remove_revoked_deprecatedNo
software_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations exist, so description carries full burden. Implies read-only retrieval, but does not explicitly confirm no side effects, network calls, or rate limits. Adequate but not comprehensive.

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

Conciseness5/5

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

Concise docstring format with one-line purpose, followed by Args and Returns. Every sentence is necessary and no redundancy.

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

Completeness4/5

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

Covers purpose, parameters, and return value. With an output schema (implied), the description does not need to detail return structure. Lacks error handling or limitations, but sufficient for a simple retrieval tool.

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

Parameters4/5

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

Input schema has 0% description coverage, but the description provides meaningful explanations for all three parameters (domain, remove_revoked_deprecated, software_types), adding value beyond the schema.

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

Purpose5/5

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

Clearly states 'Get all software from the MITRE ATT&CK framework' with specific verb and resource. Distinct 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.

Usage Guidelines3/5

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

Describes parameters for filtering but lacks explicit guidance on when to use this tool vs alternatives. Sibling tools are listed but no comparison provided.

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

get_tacticsA

Get all tactics from the MITRE ATT&CK framework.

Args: domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack) remove_revoked_deprecated: Remove revoked or deprecated objects

Returns: Dictionary containing a list of tactics

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoenterprise-attack
remove_revoked_deprecatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description provides clear behavioral context: it is a read operation returning a dictionary of tactics, with filtering options. No side effects or destructive actions 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.

Conciseness5/5

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

The description is concise with separate Args and Returns sections, no unnecessary words. Every sentence adds value.

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

Completeness4/5

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

The tool has only two simple parameters and an output schema; the description covers parameters and return type. It lacks information about error handling or valid domain values beyond the list, but overall is complete for a straightforward retrieval.

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

Parameters5/5

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

The description explicitly explains both parameters: 'domain' with three valid values and 'remove_revoked_deprecated' as a boolean to clean up objects. This adds significant meaning beyond the input schema's bare type/default definitions.

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

Purpose5/5

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

The description clearly states 'Get all tactics from the MITRE ATT&CK framework', using a specific verb and resource. It distinguishes itself from sibling tools that retrieve other entities (groups, mitigations, software, techniques).

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

Usage Guidelines4/5

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

The description implicitly indicates usage for retrieving tactics, but does not explicitly provide when-to-use vs alternatives, nor exclusions. However, the sibling tools are for other entity types, making it clear enough.

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

Get a technique by its MITRE ATT&CK ID.

Args: technique_id: The MITRE ATT&CK ID of the technique (e.g., 'T1055') domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack)

Returns: Dictionary containing the technique

ParametersJSON Schema
NameRequiredDescriptionDefault
technique_idYes
domainNoenterprise-attack

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Describes parameters and return type, but lacks details on error handling, authentication, rate limits, or side effects. With no annotations, more transparency would be beneficial.

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

Conciseness5/5

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

Concise and well-structured docstring with purpose, args, returns. Front-loaded, no wasted words.

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

Completeness4/5

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

Covers main aspects with output schema present. Missing info on error behavior, but adequate for a lookup tool.

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

Parameters4/5

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

Adds meaning beyond schema by explaining technique_id with example and listing domain values. Default value for domain is only in schema; could be more explicit.

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

Purpose5/5

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

Clearly states 'Get a technique by its MITRE ATT&CK ID' with specific verb and resource. Distinguishes from sibling tools that list or filter techniques.

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

Usage Guidelines3/5

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

Implied usage for single technique lookup, but no explicit guidance on when to use vs siblings or when not to use.

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

get_techniquesA

Get techniques from the MITRE ATT&CK framework with token-optimized responses.

Args: domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack) include_subtechniques: Include subtechniques in the result remove_revoked_deprecated: Remove revoked or deprecated objects include_descriptions: Whether to include technique descriptions (uses more tokens) limit: Maximum number of techniques to return (default: 20) offset: Index to start from when returning techniques (for pagination)

Returns: Dictionary containing a list of techniques and pagination metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoenterprise-attack
include_subtechniquesNo
remove_revoked_deprecatedNo
include_descriptionsNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses pagination via limit/offset, token optimization via include_descriptions, and data filtering via remove_revoked_deprecated. However, it does not mention rate limits, caching, or authentication requirements.

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

Conciseness4/5

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

The description is well-structured with separate Args and Returns sections. It is moderately concise but could be slightly shorter by omitting redundant defaults. Front-loading is good with the main purpose stated first.

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

Completeness4/5

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

Given 6 parameters, no annotations, and an output schema (though description briefly mentions return type), the description is reasonably complete. It covers all inputs and explains the return value. Missing explicit details about output format beyond 'dictionary containing list and pagination metadata'.

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

Parameters5/5

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

Schema coverage is 0%, so description compensates fully. It explains all 6 parameters: domain with examples, include_subtechniques, remove_revoked_deprecated, include_descriptions (token usage), limit (default 20), and offset (pagination). Each parameter's purpose and effect are clear.

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

Purpose5/5

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

The description clearly states it 'gets techniques from the MITRE ATT&CK framework' with a specific verb and resource. It distinguishes from sibling tools like get_groups and get_mitigations by focusing solely on techniques and mentioning token-optimized responses.

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

Usage Guidelines3/5

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

The description implies usage for listing techniques but does not explicitly differentiate when to use this tool versus alternatives like get_technique_by_id or get_techniques_by_tactic. No guidance on when not to use it.

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

get_techniques_by_tacticB

Get techniques by tactic.

Args: tactic_shortname: The shortname of the tactic (e.g., 'defense-evasion') domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack) remove_revoked_deprecated: Remove revoked or deprecated objects

Returns: Dictionary containing a list of techniques

ParametersJSON Schema
NameRequiredDescriptionDefault
tactic_shortnameYes
domainNoenterprise-attack
remove_revoked_deprecatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits beyond basic operation (e.g., read-only nature, pagination, 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.

Conciseness5/5

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

The description is very concise, with clear Args and Returns sections, and no unnecessary words.

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

Completeness4/5

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

With an output schema present, the description adequately covers the return format. However, it could explain more about the filtering behavior of remove_revoked_deprecated and potential constraints.

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

Parameters3/5

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

Schema coverage is 0%, but the description provides an example for tactic_shortname and lists the domain options, adding some value. However, it does not explain the effect of remove_revoked_deprecated beyond the name, and defaults are not mentioned.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'techniques by tactic', distinguishing it from siblings like get_techniques (no tactic filter) and get_technique_by_id (single technique).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like get_techniques or get_techniques_used_by_group. The description lacks context on use cases or exclusions.

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 techniques mitigated by a mitigation.

Args: mitigation_name: The name of the mitigation domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack)

Returns: Dictionary containing the mitigation and a list of techniques

ParametersJSON Schema
NameRequiredDescriptionDefault
mitigation_nameYes
domainNoenterprise-attack

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It explains that the tool returns a dictionary with mitigation and technique list, but does not disclose any behavioral traits beyond basic function. For a read-only query, this is adequate but not exceptional; no side effects or prerequisites are mentioned.

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

Conciseness5/5

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

The description is very concise: two sentences plus an argument list. It immediately states the purpose and then lists parameters with clear explanations. No extraneous information; every sentence earns its place.

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

Completeness4/5

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

Given the tool is a simple query with 2 parameters and a likely straightforward output (dictionary with mitigation and techniques), the description covers the essential information. It mentions the return structure and domain options. An example would improve completeness, but it is largely sufficient.

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

Parameters4/5

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

Input schema has 0% description coverage, meaning the description is the sole source of parameter meaning. It explains mitigation_name as 'the name of the mitigation' and domain with allowed values. This adds significant value beyond the schema, which only provides names and types. The description compensates well 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.

Purpose5/5

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

The description clearly states 'Get techniques mitigated by a mitigation', which specifies the verb (get), resource (techniques), and filter (mitigated by a mitigation). It distinguishes from sibling tools like get_techniques (returns all techniques) and get_techniques_by_tactic (by tactic).

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

Usage Guidelines3/5

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

The description lists domain options but does not explicitly state when to use this tool versus alternatives. For example, it doesn't mention that this tool should be used to retrieve techniques associated with a specific mitigation, while get_mitigations would return mitigation details. The context from sibling names implies usage, but no direct guidance is given.

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_groupB

Get techniques used by a group.

Args: group_name: The name of the group domain: Domain to query (enterprise-attack, mobile-attack, or ics-attack)

Returns: Dictionary containing the group and a list of techniques

ParametersJSON Schema
NameRequiredDescriptionDefault
group_nameYes
domainNoenterprise-attack

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. It does not state read-only nature, error conditions, or performance implications. The basic operation is described, but behavioral traits beyond the obvious 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.

Conciseness5/5

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

Description is very concise with clear header, args, and returns. No redundant or irrelevant information. Well-structured for quick parsing.

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

Completeness3/5

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

For a simple two-parameter tool with output schema, the description covers the basic operation and parameters. However, it lacks usage guidance and behavioral details, making it adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 0%, so description must add meaning. It explains group_name and domain with enumerated values, which adds value. However, it does not provide additional context like input format or constraints beyond the schema.

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

Purpose4/5

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

The description clearly states it gets techniques used by a group. It distinguishes from sibling tools like get_techniques and get_techniques_by_tactic by specifying 'by group', but does not explicitly differentiate from get_software or get_groups. Overall clear purpose.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like get_techniques_by_tactic or get_techniques. No mention of prerequisites (e.g., group must already exist). The description only explains parameters, not usage context.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.3.1
    • First observedget_groups
    • First observedget_mitigations
    • First observedget_software
    • First observedget_tactics
    • First observedget_technique_by_id
    • First observedget_techniques
    • First observedget_techniques_by_tactic
    • First observedget_techniques_mitigated_by_mitigation
    • First observedget_techniques_used_by_group

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a distinct ATT&CK entity or relationship (groups, mitigations, software, tactics, techniques) with no overlap. Even the technique tools are differentiated by access pattern (by ID, by tactic, all with pagination, etc.).

Naming Consistency5/5

All tools follow a consistent 'get_<entity>' pattern, with variations like 'get_technique_by_id' and 'get_techniques_by_tactic' using clear postfix modifiers. No mixing of conventions.

Tool Count5/5

9 tools cover the core ATT&CK entities and their key relationships. The scope is well-defined without being bloated or sparse.

Completeness4/5

Covers all major ATT&CK entities and important relationships (techniques by tactic, by mitigation, by group). Minor gaps like missing direct lookups for mitigations or software by ID, but these can be worked around via filtering.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -
  • F
    license
    B
    quality
    D
    maintenance
    Provides 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.
    55
    43
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI-native access to the MITRE ATT\&CK framework, allowing LLMs and agents to query techniques, threat groups, software, and generate ATT\&CK Navigator layers for threat intelligence and security workflows.
    65
    76
    5
    Apache 2.0

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Montimage/mitre-mcp'

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