huntress mcp server
MCP server for Huntress API integration
MCP server for Huntress API integration
A Model Context Protocol (MCP) server that provides tools for interacting with the Huntress API. This server enables programmatic access to Huntress functionality including account management, organization management, agent management, incident reports, and more.
To install Huntress API MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install huntress-mcp-server --client claude
npm install
.env
file based on .env.example
:
HUNTRESS_API_KEY=your_api_key_here
HUNTRESS_API_SECRET=your_api_secret_here
npm run build
get_account_info
: Get information about the current accountlist_organizations
: List organizations in the accountget_organization
: Get details of a specific organizationlist_agents
: List agents in the accountget_agent
: Get details of a specific agentlist_incident_reports
: List incident reportsget_incident_report
: Get details of a specific incident reportlist_summary_reports
: List summary reportsget_summary_report
: Get details of a specific summary reportlist_billing_reports
: List billing reportsget_billing_report
: Get details of a specific billing reportThe server requires the following environment variables:
HUNTRESS_API_KEY
: Your Huntress API KeyHUNTRESS_API_SECRET
: Your Huntress API Secret KeyThese can be obtained from your Huntress account at <your_account_subdomain>.huntress.io
under API Credentials.
Add the following configuration to your MCP settings:
{
"mcpServers": {
"huntress": {
"command": "node",
"args": ["path/to/huntress-server/build/index.js"],
"env": {
"HUNTRESS_API_KEY": "your_api_key_here",
"HUNTRESS_API_SECRET": "your_api_secret_here"
}
}
}
}
The server implements Huntress API's rate limiting of 60 requests per minute on a sliding window. This means: - No more than 60 requests can be made within any 60-second period - The window slides, so if request 1 is made at T0 and request 60 at T30, request 61 must wait until T60
The server handles various error scenarios: - Invalid API credentials - Rate limit exceeded - Invalid request parameters - API response errors
MIT License - See LICENSE file for details
[
{
"description": "Get information about the current account",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_account_info"
},
{
"description": "List organizations in the account",
"inputSchema": {
"properties": {
"limit": {
"description": "Number of results per page (1-500)",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"page": {
"description": "Page number (starts at 1)",
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_organizations"
},
{
"description": "Get details of a specific organization",
"inputSchema": {
"properties": {
"organization_id": {
"description": "Organization ID",
"type": "integer"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "get_organization"
},
{
"description": "List agents in the account",
"inputSchema": {
"properties": {
"limit": {
"description": "Number of results per page (1-500)",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Filter by organization ID",
"type": "integer"
},
"page": {
"description": "Page number (starts at 1)",
"minimum": 1,
"type": "integer"
},
"platform": {
"description": "Filter by platform (darwin or windows)",
"enum": [
"darwin",
"windows"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_agents"
},
{
"description": "Get details of a specific agent",
"inputSchema": {
"properties": {
"agent_id": {
"description": "Agent ID",
"type": "integer"
}
},
"required": [
"agent_id"
],
"type": "object"
},
"name": "get_agent"
},
{
"description": "List incident reports",
"inputSchema": {
"properties": {
"limit": {
"description": "Number of results per page (1-500)",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Filter by organization ID",
"type": "integer"
},
"page": {
"description": "Page number (starts at 1)",
"minimum": 1,
"type": "integer"
},
"severity": {
"description": "Filter by severity",
"enum": [
"low",
"high",
"critical"
],
"type": "string"
},
"status": {
"description": "Filter by status",
"enum": [
"sent",
"closed",
"dismissed"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_incident_reports"
},
{
"description": "Get details of a specific incident report",
"inputSchema": {
"properties": {
"report_id": {
"description": "Incident Report ID",
"type": "integer"
}
},
"required": [
"report_id"
],
"type": "object"
},
"name": "get_incident_report"
},
{
"description": "List summary reports",
"inputSchema": {
"properties": {
"limit": {
"description": "Number of results per page (1-500)",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Filter by organization ID",
"type": "integer"
},
"page": {
"description": "Page number (starts at 1)",
"minimum": 1,
"type": "integer"
},
"type": {
"description": "Filter by report type",
"enum": [
"monthly_summary",
"quarterly_summary",
"yearly_summary"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_summary_reports"
},
{
"description": "Get details of a specific summary report",
"inputSchema": {
"properties": {
"report_id": {
"description": "Summary Report ID",
"type": "integer"
}
},
"required": [
"report_id"
],
"type": "object"
},
"name": "get_summary_report"
},
{
"description": "List billing reports",
"inputSchema": {
"properties": {
"limit": {
"description": "Number of results per page (1-500)",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"page": {
"description": "Page number (starts at 1)",
"minimum": 1,
"type": "integer"
},
"status": {
"description": "Filter by status",
"enum": [
"open",
"paid",
"failed",
"partial_refund",
"full_refund"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_billing_reports"
},
{
"description": "Get details of a specific billing report",
"inputSchema": {
"properties": {
"report_id": {
"description": "Billing Report ID",
"type": "integer"
}
},
"required": [
"report_id"
],
"type": "object"
},
"name": "get_billing_report"
}
]