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., "@Huntress SAT MCP Servershow me the results of the most recent phishing campaign"
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.
Huntress SAT MCP Server
A Model Context Protocol (MCP) server for the Huntress SAT (formerly Curricula) Security Awareness Training API.
Features
Full API Coverage: Tools for managing organizations, learners, phishing campaigns, training courses, assignments, and reports
OAuth2 Authentication: Secure client credentials flow for API access
RBAC Support: Role-based access control (disabled by default, easily enabled)
Multiple Transports: Supports both stdio and streamable-http transports
Docker Ready: Production-ready Docker container with multi-transport support
Installation
From Source
# Clone the repository
git clone https://github.com/example/huntress-sat-mcp.git
cd huntress-sat-mcp
# Install with pip
pip install -e .
# Or with uv (recommended)
uv pip install -e .Using Docker
# Build the image
docker build -t huntress-sat-mcp .
# Or use docker-compose
docker-compose buildConfiguration
The server is configured via environment variables. All variables are prefixed with HUNTRESS_SAT_.
Required Variables
Variable | Description |
| OAuth2 Client ID from Huntress SAT |
| OAuth2 Client Secret from Huntress SAT |
Optional Variables
Variable | Default | Description |
|
| API base URL |
|
| OAuth2 token endpoint |
|
| Transport mode: |
|
| Host for HTTP transport |
|
| Port for HTTP transport |
|
| Enable role-based access control |
|
| Default RBAC role |
|
| Request timeout in seconds |
|
| Max retry attempts |
Environment File
Create a .env file in the project root:
HUNTRESS_SAT_CLIENT_ID=your_client_id
HUNTRESS_SAT_CLIENT_SECRET=your_client_secret
HUNTRESS_SAT_RBAC_ENABLED=falseUsage
Running with stdio Transport
# Direct execution
huntress-sat-mcp
# Or with Python
python -m huntress_sat_mcp.server
# With environment variables
HUNTRESS_SAT_CLIENT_ID=xxx HUNTRESS_SAT_CLIENT_SECRET=yyy huntress-sat-mcpRunning with Streamable HTTP Transport
# Set transport mode
export HUNTRESS_SAT_TRANSPORT=streamable-http
export HUNTRESS_SAT_HOST=0.0.0.0
export HUNTRESS_SAT_PORT=8000
huntress-sat-mcpUsing Docker
# HTTP Transport (default in docker-compose)
docker-compose up huntress-sat-mcp-http
# Stdio Transport
docker-compose --profile stdio up huntress-sat-mcp-stdio
# Development mode with RBAC enabled
docker-compose --profile dev up huntress-sat-mcp-devMCP Client Configuration
Add to your MCP client configuration (e.g., Claude Desktop):
{
"mcpServers": {
"huntress-sat": {
"command": "huntress-sat-mcp",
"env": {
"HUNTRESS_SAT_CLIENT_ID": "your_client_id",
"HUNTRESS_SAT_CLIENT_SECRET": "your_client_secret"
}
}
}
}For HTTP transport:
{
"mcpServers": {
"huntress-sat": {
"url": "http://localhost:8000/mcp"
}
}
}For Docker Compose (stdio transport):
{
"mcpServers": {
"huntress-sat": {
"command": "docker",
"args": [
"compose",
"-f", "/path/to/docker-compose.yml",
"run", "--rm", "-i",
"huntress-sat-mcp-stdio"
]
}
}
}Note: Replace
/path/to/docker-compose.ymlwith the absolute path to your docker-compose.yml file. The-iflag is required for interactive stdin communication with the MCP server. Credentials are loaded from the.envfile in the project directory.
Available Tools
Organization Management
Tool | Description |
| List all organizations with pagination and search |
| Get details of a specific organization |
Learner Management
Tool | Description |
| List learners with filters (org, department, tag, status) |
| Get learner details |
| Create a new learner |
| Update learner information |
| Delete a learner |
Phishing Campaigns
Tool | Description |
| List campaigns with filters and sorting |
| Get campaign details and metrics |
| Get individual learner results for a campaign |
| List available phishing templates |
Training
Tool | Description |
| List available training courses |
| Get course details |
| List training assignments |
| Get assignment details |
| Create a new training assignment |
Reports
Tool | Description |
| Get training progress for learners |
| Get summary statistics and metrics |
Organization Structure
Tool | Description |
| List departments with learner counts |
| List tags with learner counts |
RBAC
Tool | Description |
| Get current RBAC configuration and permissions |
Role-Based Access Control (RBAC)
RBAC is disabled by default. When enabled, access to tools is restricted based on user roles.
Available Roles
Role | Description |
| Full access to all tools |
| Can read and write, but cannot delete learners |
| Can read all data and generate reports |
| Read-only access to all data |
Permissions
org:read,org:write- Organization managementlearner:read,learner:write,learner:delete- Learner managementphishing:read,phishing:write- Phishing campaign accesstraining:read,training:write- Training course accessassignment:read,assignment:write- Assignment managementreport:read,report:generate- Report access
Enabling RBAC
export HUNTRESS_SAT_RBAC_ENABLED=true
export HUNTRESS_SAT_RBAC_DEFAULT_ROLE=viewerDevelopment
Setup
# Install development dependencies
pip install -e ".[dev]"
# Run linting
ruff check src/
# Run type checking
mypy src/
# Run tests
pytestProject Structure
huntress-sat-mcp/
├── src/
│ └── huntress_sat_mcp/
│ ├── __init__.py # Package initialization
│ ├── config.py # Configuration management
│ ├── models.py # Pydantic models
│ ├── client.py # API client with OAuth2
│ ├── rbac.py # Role-based access control
│ └── server.py # MCP server with tools
├── Dockerfile # Multi-stage Docker build
├── docker-compose.yml # Docker Compose configurations
├── pyproject.toml # Project configuration
└── README.mdAPI Reference
This MCP server wraps the Huntress SAT (Curricula) API. For detailed API documentation, visit:
License
MIT License
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.