SaaS Alerts

io.github.WYRE-AIPublished by GitHub account WYRE-AIv1.2.9Updated Oct 24, 2026

MCP server for Kaseya SaaS Alerts — SaaS security monitoring for M365 & Google Workspace.

The publisher's own server: AlertsBar

Overview

AI-generated overview

MCP server for Kaseya SaaS Alerts that lets an assistant query M365 and Google Workspace security events and manage customers, devices, reports and billing.

What you can do
  • Query and count security events by severity, customer, user or event type, run advanced queries with scroll pagination, and get recommended actions
  • List, get, create, update and delete customers, and set IP, country and account whitelists
  • Look up MSP, partner and customer users, and unify mapped, unmapped and ignored devices
  • Review billing details and billing date history, and list, get, create or delete scheduled reports
  • Read partner profile and branding settings
When to use it
Useful for managed service providers and security teams that want an assistant to triage SaaS security alerts, investigate events across tenants, or maintain customer and device records in SaaS Alerts without switching to the web UI.
Requirements
Runs locally over stdio (Node.js or the published container image). A SaaS Alerts API key is required, generated in the SaaS Alerts UI and passed as SAAS_ALERTS_API_KEY, or injected per request as the X-SaaS-Alerts-API-Key header in gateway mode. HTTP mode additionally requires CONDUIT_S2S_SECRET and signed X-Gateway-S2S requests.
Before you install
The API key grants access to a security monitoring tenant, so keep it out of source control and logs. Customer and scheduled report deletion are irreversible; confirmation prompts are skipped when the client does not support elicitation, so verify before invoking them. Customer updates and whitelist changes modify live configuration. HTTP mode without CONDUIT_S2S_SECRET is development-only and should not be exposed.

Installation

In SourceWeft

  1. Open SaaS Alerts in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

saas-alerts-mcp

Model Context Protocol server for Kaseya SaaS Alerts — a SaaS security monitoring platform for M365 and Google Workspace events.

Part of the WYRE Technology MCP fleet.

Features

Exposes the full SaaS Alerts External Partner API (v0.20.0) through 30 MCP tools organized by domain:

DomainTools
eventsQuery/count security events by severity, customer, user, event type; advanced Elasticsearch queries; scroll pagination; recommended actions
customersList, get, create, update, delete customers; set IP/country and account whitelists
usersMSP user info, partner users, customer users
devicesUnify mapped/unmapped/ignored devices, device organizations
billingBilling details by date, billing date history
reportsList/get/create/delete scheduled reports
partnerPartner profile, branding settings

Write/destructive tools require user confirmation via MCP elicitation (fail-open: proceeds if client doesn't support elicitation).

Authentication

SaaS Alerts uses an API key sent as the api_key HTTP header.

Generate your API key in the SaaS Alerts UI under Settings → API Keys.

Copy .env.example. Leave CONDUIT_S2S_SECRET empty in that file and never commit a real value.

VariableRequiredDescription
SAAS_ALERTS_API_KEYFor stdio and AUTH_MODE=envSaaS Alerts API key. Gateway mode does not read it.
MCP_TRANSPORTNostdio (default) or http
AUTH_MODENogateway (Docker image and Compose default) or env. Gateway mode requires X-SaaS-Alerts-API-Key on each /mcp request and never falls back to SAAS_ALERTS_API_KEY.
CONDUIT_S2S_SECRETYes for HTTPService-to-service secret. The HTTP server logs an error and exits non-zero when this is empty or a known placeholder (changeme, secret, your-s2s-secret, and the other example values). Compose will not start when it is unset. The value is never logged.
MCP_ALLOW_INSECURE_DEVNoSet to 1 only for local development to start HTTP without CONDUIT_S2S_SECRET. The process logs a warning, does not enforce X-Gateway-S2S, and listens on 127.0.0.1 only. A wider MCP_HTTP_HOST (including 0.0.0.0) is overridden. A placeholder secret is still rejected.
MCP_HTTP_HOSTNoBind address when a real CONDUIT_S2S_SECRET is set. Defaults to 127.0.0.1. The container image sets 0.0.0.0. Without a real secret the listener is forced to 127.0.0.1.
MCP_HTTP_PORTNoHTTP port. Defaults to 8080.

/health and /healthz stay unauthenticated and do not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.

X-Gateway-S2S signing

With MCP_TRANSPORT=http and a real CONDUIT_S2S_SECRET, every /mcp request must include X-Gateway-S2S. A missing or invalid header returns 401 before any vendor credential is read.

The header value is t=<unix seconds>,v1=<hex hmac-sha256>:

  1. Set t to the current unix time in seconds.
  2. Sign the ASCII message t=<unix seconds> with HMAC-SHA256, using CONDUIT_S2S_SECRET as the key.
  3. Hex-encode the digest (64 lowercase hex characters) and send t=<unix seconds>,v1=<hex>.

The timestamp must be within 300 seconds of the server clock. Example:

js
import { createHmac } from 'node:crypto';
const t = Math.floor(Date.now() / 1000);const v1 = createHmac('sha256', process.env.CONDUIT_S2S_SECRET).update(`t=${t}`).digest('hex');const xGatewayS2s = `t=${t},v1=${v1}`;

Local / stdio mode

bash
export SAAS_ALERTS_API_KEY=your-api-keynode dist/index.js

HTTP mode

CONDUIT_S2S_SECRET is required. If it is empty, the process logs an error and exits non-zero.

bash
export CONDUIT_S2S_SECRET="$(openssl rand -hex 32)"export SAAS_ALERTS_API_KEY=your-api-keyexport MCP_TRANSPORT=httpexport AUTH_MODE=envexport MCP_HTTP_PORT=8080node dist/http.js

Local HTTP without a secret is development-only. It binds 127.0.0.1 even if MCP_HTTP_HOST is 0.0.0.0, and logs a warning:

bash
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run start:http

WYRE Gateway mode

When running behind the WYRE MCP Gateway, set AUTH_MODE=gateway (the image and Compose default). The gateway signs each request with X-Gateway-S2S and injects the API key via X-SaaS-Alerts-API-Key. A request missing that credential header returns 401 and does not use SAAS_ALERTS_API_KEY from the environment.

js
await fetch('http://127.0.0.1:8080/mcp', {  method: 'POST',  headers: {    'content-type': 'application/json',    accept: 'application/json, text/event-stream',    'x-gateway-s2s': xGatewayS2s,    'x-saas-alerts-api-key': apiKey,  },  body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/list' }),});

Running with Docker

The image listens on 0.0.0.0 inside the container and defaults to AUTH_MODE=gateway. Publish the port on loopback and pass the S2S secret. In gateway mode the SaaS Alerts API key arrives on each request; it is not read from the environment.

bash
docker build -t saas-alerts-mcp .docker run \  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \  -p 127.0.0.1:8080:8080 \  saas-alerts-mcp

Compose refuses to start when CONDUIT_S2S_SECRET is unset, sets AUTH_MODE=gateway, publishes 127.0.0.1:8080:8080, and does not pass SAAS_ALERTS_API_KEY into the gateway service:

bash
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up

Single-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses SAAS_ALERTS_API_KEY:

bash
docker run \  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \  -e AUTH_MODE=env \  -e SAAS_ALERTS_API_KEY=your-key \  -p 127.0.0.1:8080:8080 \  ghcr.io/wyre-ai/saas-alerts-mcp:latest

Development

bash
npm installnpm run buildnpm testnpm run lintnode scripts/lint-destructive-warnings.mjs src

Destructive tool confirmation

Tools that permanently delete data (customer delete, scheduled report delete) carry:

  • ⚠ DESTRUCTIVE — IRREVERSIBLE description prefix
  • annotations.destructiveHint: true
  • Elicitation confirmation guard (additive — proceeds if client doesn't support elicitation)

Always confirm with the user before invoking these tools.

License

Apache-2.0 — see LICENSE.

Source: README.md at commit a3e43b5

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

3
  1. v1.2.9LatestOct 14, 2026
  2. v1.2.8Sep 25, 2026
  3. v1.2.7Sep 16, 2026

Score

40% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.

Other Alerts integrations