agentsclimarketplace

Tracecat secrets integrations

Skill adrojis/tracecat-skills/skills/tracecat-secrets-integrations

Activate when users configure secrets, connect integrations, set up Splunk, CrowdStrike, Okta, Wazuh, Slack, Jira, VirusTotal, GLIMPS, Microsoft Defender, or any third-party tool with TracecatFrom its SKILL.md

Install
npx -y skills add adrojis/tracecat-skills --skill tracecat-secrets-integrations

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • reads credentialsReads from 8 credential sources: `SECRETS.virustotal.API_KEY` and 7 more.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.1 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it

Tracecat Secrets & Integrations Expert

You are an expert at configuring secrets and connecting external tools with Tracecat.

Secret Management

Creating Secrets (MCP)

tracecat_create_secret:
  name: "virustotal"
  type: "custom"
  keys:
    - { key: "API_KEY", value: "your-api-key-here" }

Secret Types

TypeUse Case
customAny key-value pairs (default)
tokenSingle bearer/API token
oauth2OAuth2 credentials
sshSSH key pairs

Accessing Secrets in Workflows

# In action inputs
headers:
  Authorization: "Bearer ${{ SECRETS.my_service.API_KEY }}"

# In Python scripts (pass via inputs, never access directly)
inputs:
  api_key: ${{ SECRETS.virustotal.API_KEY }}

Secret Naming Convention

Use the integration name as the secret name for auto-resolution:

  • virustotal for VirusTotal
  • crowdstrike for CrowdStrike
  • splunk for Splunk
  • slack for Slack

Integration Reference

Threat Intelligence

VirusTotal

Secret: virustotal
Keys: API_KEY
# Via native integration
action: tools.virustotal.analyze_hash
args:
  hash: ${{ TRIGGER.data.file_hash }}

# Via HTTP (API v3)
action: core.http_request
args:
  url: https://www.virustotal.com/api/v3/files/${{ TRIGGER.data.hash }}
  method: GET
  headers:
    x-apikey: ${{ SECRETS.virustotal.API_KEY }}

AbuseIPDB

Secret: abuseipdb
Keys: API_KEY
action: core.http_request
args:
  url: https://api.abuseipdb.com/api/v2/check
  method: GET
  headers:
    Key: ${{ SECRETS.abuseipdb.API_KEY }}
  params:
    ipAddress: ${{ TRIGGER.data.ip }}
    maxAgeInDays: "90"

GreyNoise

Secret: greynoise
Keys: API_KEY

Shodan

Secret: shodan
Keys: API_KEY

EDR / Endpoint

CrowdStrike Falcon

Secret: crowdstrike
Keys: CLIENT_ID, CLIENT_SECRET
# Step 1: Get OAuth2 token
action: core.http_request
args:
  url: https://api.crowdstrike.com/oauth2/token
  method: POST
  headers:
    Content-Type: application/x-www-form-urlencoded
  payload:
    client_id: ${{ SECRETS.crowdstrike.CLIENT_ID }}
    client_secret: ${{ SECRETS.crowdstrike.CLIENT_SECRET }}

# Step 2: Use token in subsequent calls
action: core.http_request
args:
  url: https://api.crowdstrike.com/detects/queries/detects/v1
  method: GET
  headers:
    Authorization: "Bearer ${{ ACTIONS.get_cs_token.result.access_token }}"

Microsoft Defender for Endpoint

Secret: msdefender
Keys: TENANT_ID, CLIENT_ID, CLIENT_SECRET
# Step 1: Get Azure AD token
action: core.http_request
args:
  url: https://login.microsoftonline.com/${{ SECRETS.msdefender.TENANT_ID }}/oauth2/v2.0/token
  method: POST
  headers:
    Content-Type: application/x-www-form-urlencoded
  payload:
    client_id: ${{ SECRETS.msdefender.CLIENT_ID }}
    client_secret: ${{ SECRETS.msdefender.CLIENT_SECRET }}
    scope: https://api.securitycenter.microsoft.com/.default
    grant_type: client_credentials

SentinelOne

Secret: sentinelone
Keys: API_KEY, BASE_URL

SIEM

Splunk

Secret: splunk
Keys: TOKEN, BASE_URL
action: core.http_request
args:
  url: ${{ SECRETS.splunk.BASE_URL }}/services/search/jobs
  method: POST
  headers:
    Authorization: "Bearer ${{ SECRETS.splunk.TOKEN }}"
    Content-Type: application/x-www-form-urlencoded
  payload:
    search: "search index=main sourcetype=syslog | head 100"
    output_mode: json

Elastic / OpenSearch

Secret: elastic
Keys: API_KEY, BASE_URL

Wazuh

Secret: wazuh
Keys: USER, PASSWORD, BASE_URL
# Step 1: Authenticate
action: core.http_request
args:
  url: ${{ SECRETS.wazuh.BASE_URL }}/security/user/authenticate
  method: POST
  headers:
    Content-Type: application/json
    Authorization: "Basic ${{ FN.base64_encode(SECRETS.wazuh.USER + ':' + SECRETS.wazuh.PASSWORD) }}"

Communication

Slack

Secret: slack
Keys: BOT_TOKEN
action: core.http_request
args:
  url: https://slack.com/api/chat.postMessage
  method: POST
  headers:
    Authorization: "Bearer ${{ SECRETS.slack.BOT_TOKEN }}"
    Content-Type: application/json
  payload:
    channel: "#security-alerts"
    text: "Alert: ${{ TRIGGER.data.alert_name }}"

Microsoft Teams (via Webhook)

Secret: teams
Keys: WEBHOOK_URL
action: core.http_request
args:
  url: ${{ SECRETS.teams.WEBHOOK_URL }}
  method: POST
  headers:
    Content-Type: application/json
  payload:
    text: "Security alert: ${{ TRIGGER.data.message }}"

PagerDuty

Secret: pagerduty
Keys: API_KEY, ROUTING_KEY

Email (SMTP)

Secret: smtp
Keys: HOST, PORT, USER, PASSWORD

Ticketing

Jira

Secret: jira
Keys: API_TOKEN, EMAIL, BASE_URL
action: core.http_request
args:
  url: ${{ SECRETS.jira.BASE_URL }}/rest/api/3/issue
  method: POST
  headers:
    Authorization: "Basic ${{ FN.base64_encode(SECRETS.jira.EMAIL + ':' + SECRETS.jira.API_TOKEN) }}"
    Content-Type: application/json
  payload:
    fields:
      project:
        key: SEC
      summary: ${{ TRIGGER.data.alert_title }}
      issuetype:
        name: Task
      description:
        type: doc
        version: 1
        content:
          - type: paragraph
            content:
              - type: text
                text: ${{ TRIGGER.data.description }}

ServiceNow

Secret: servicenow
Keys: INSTANCE_URL, USER, PASSWORD

Identity & Access

Okta

Secret: okta
Keys: API_KEY, DOMAIN
# Suspend a user
action: core.http_request
args:
  url: https://${{ SECRETS.okta.DOMAIN }}/api/v1/users/${{ TRIGGER.data.user_id }}/lifecycle/suspend
  method: POST
  headers:
    Authorization: "SSWS ${{ SECRETS.okta.API_KEY }}"

Azure AD / Entra ID

Secret: azuread
Keys: TENANT_ID, CLIENT_ID, CLIENT_SECRET

File Analysis

GLIMPS Malware

Secret: glimps
Keys: API_KEY, BASE_URL
action: core.http_request
args:
  url: ${{ SECRETS.glimps.BASE_URL }}/submit
  method: POST
  headers:
    Authorization: "Bearer ${{ SECRETS.glimps.API_KEY }}"

MCP Tools for Secrets

ToolUsage
tracecat_create_secretCreate new secret with key-value pairs
tracecat_get_secretGet secret metadata (NOT decrypted values)
tracecat_update_secretUpdate secret keys or description
tracecat_delete_secretPermanently delete a secret
tracecat_search_secretsSearch secrets by name

Best Practices

  1. Naming — Use the integration name as the secret name
  2. Key naming — Use UPPERCASE for key names (API_KEY, CLIENT_ID)
  3. Least privilege — Use API keys with minimum required permissions
  4. Rotation — Rotate secrets regularly via tracecat_update_secret
  5. No hardcoding — Never put credentials in action inputs directly
  6. Test first — Test integrations with non-destructive read-only actions before containment/blocking
  7. Rate limiting — Add start_delay or batch processing for high-volume API calls
  8. Error handling — Use error edges to handle API failures (401, 403, 429)

Common Mistakes

MistakeCorrect
${{ SECRETS.vt.api_key }} (lowercase)${{ SECRETS.virustotal.API_KEY }}
Hardcoded API key in URLUse ${{ SECRETS.name.KEY }}
Accessing secrets in Python directlyPass via inputs field
Creating duplicate secret namesCheck with tracecat_search_secrets first
Forgetting OAuth2 token stepCrowdStrike/Defender need token exchange first

Related Skills

  • tracecat-action-configuration — Action types and input configuration
  • tracecat-mcp-tools-expert — MCP tools for secret operations
  • tracecat-workflow-patterns — Integration patterns in workflows
  • tracecat-code-python — Custom integrations via Python scripts
  • tracecat-validation-debug — Debug secret access errors

Reference Files

What ships with it: 3 files

9.5 KB alongside SKILL.md

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.