SpamTitan Lists — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited SpamTitan Lists (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
SpamTitan maintains two key sender policy lists that override the spam filtering engine: the allowlist (trusted senders whose mail is always delivered) and the blocklist (blocked senders whose mail is always rejected or quarantined). Proper list management is essential for MSPs to balance effective spam filtering against business continuity — preventing false positives from disrupting client workflows while blocking persistent unwanted senders.
use SpamTitan Quarantine.
federate. Ironscales keeps its own allowlist behind IRONSCALES Incidents, and every other gateway keeps its own too; allowlisting here changes nothing anywhere else.
SpamTitan gateway, upstream of Exchange Online. Forwarding, inbox rules, and mailbox-level mail flow are Microsoft 365 Mailboxes or cipp-mailboxes.
The allowlist contains senders whose email is delivered directly to users' inboxes, bypassing spam scoring. Use the allowlist for:
Caution: Allowlisting bypasses spam filtering entirely. Only allowlist senders you have explicitly verified as legitimate. Attackers frequently spoof trusted sender addresses.
The blocklist causes matching emails to be immediately rejected or quarantined, regardless of their spam score. Use the blocklist for:
The sender parameter on both tools accepts:
[email protected] — matches only that exact address@example.com — matches all senders from that domainAdd IP entries in the SpamTitan admin interface.
The SpamTitan appliance itself distinguishes global entries from per-domain ones, and per-domain entries are what you want in an MSP environment — a global entry affects every client the gateway filters for.
There is no domain or scope parameter, so an entry added through these tools lands at whatever default scope the appliance and API key give it. If a client-scoped entry is required, add it in the SpamTitan admin interface and record the reason there; do not claim a per-domain scope you did not set.
Listing is an argument, not a separate tool: call spamtitan_manage_allowlist with action: "list".
{
"action": "list"
}Parameters (complete — there is no domain, type, page, or limit):
action — Required. add, remove, or listsender — Email address or domain. Required by the handler for add andremove; ignored for list
note — Free-text reason recorded with the entry (for add)Omitting action makes the server elicit it from the caller. An unattended agent cannot answer an elicitation, so the call stalls instead of proceeding.
The list is returned whole — there is no pagination on this call, so a large list arrives in one response.
Example response:
The server wraps whatever the appliance returns as { "allowlist": [...] }. Entry shape is the appliance's, not this connector's — expect something like:
{
"allowlist": [
{
"id": "al-00491",
"entry": "[email protected]",
"type": "email",
"domain": "clientcorp.com",
"added_at": "2026-01-15T10:30:00Z",
"added_by": "[email protected]",
"notes": "PagerDuty monitoring alerts — falsely quarantined"
}
]
}Note the response may carry a domain on an entry even though you cannot set one through this connector — that reflects how the entry was created, which may have been in the admin interface.
Same tool, different action.
spamtitan_manage_allowlistParameters:
action — Required. add, remove, or listsender — The sender address or domain (e.g. [email protected] or@example.com). Required for add and remove
note — Reason for adding (strongly recommended for audit trail; applies toadd). Singular note, not notes
Example — Add email address to allowlist:
{
"action": "add",
"sender": "[email protected]",
"note": "CRM notification emails — quarantined due to bulk mail score"
}Example response:
{
"success": true,
"message": "'[email protected]' added to allowlist"
}Example — Remove an entry from allowlist:
{
"action": "remove",
"sender": "[email protected]"
}Same shape as the allowlist: spamtitan_manage_blocklist with action: "list".
{
"action": "list"
}Parameters (complete — there is no domain, type, page, or limit):
action — Required. add, remove, or listsender — Required for add and removenote — Free-text reason (for add)Example response (wrapped as { "blocklist": [...] }):
{
"blocklist": [
{
"id": "bl-00201",
"entry": "@persistent-spammer.net",
"type": "domain",
"scope": "global",
"added_at": "2026-02-28T09:00:00Z",
"notes": "Confirmed spam campaign — multiple clients targeted"
}
]
}spamtitan_manage_blocklist⚠ HIGH-IMPACT — the server marks this tool `destructiveHint: true` and opens its own description with a warning. Oneaddcan silently stop a customer's legitimate mail: there is no bounce visible to the recipient and no alert, so the sender simply stops arriving, sometimes for weeks before anyone notices. A domain-scoped entry against a shared sending service takes out every customer using it. And because this connector has nodomainparameter, you cannot confine the entry to one client from here. Confirm with a human before everyaddand everyremove;action: "list"is the only benign call on this tool.
Parameters:
action — Required. add, remove, or listsender — The sender address or domain to block (e.g. [email protected] or@evil.com). Required for add and remove
note — Reason for blocking (required as audit-trail practice, optional tothe API). Singular note, not notes
Example — Block a domain:
{
"action": "add",
"sender": "@confirmed-malicious.ru",
"note": "Confirmed phishing domain — identified in multiple client incidents 2026-03-02"
}Example response:
{
"success": true,
"message": "'@confirmed-malicious.ru' added to blocklist"
}Example — Remove a blocklist entry (e.g., false positive block):
{
"action": "remove",
"sender": "[email protected]"
}spamtitan_manage_allowlist with action=list to check if the sender is already listed (may need to be updated)spamtitan_manage_allowlist with action=add and the sender address or domainspamtitan_release_message — a separate call; release does not allowlistnote value explaining why the sender is trusteddomain parameter, so the entry lands wherever the appliance and API key put it. If the block must be confined to one client, do it in the SpamTitan admin interface insteadspamtitan_manage_blocklist with action=add, the sender, and a descriptive note. Get a human to confirm first — this is the high-impact tool@gmail.com)spamtitan_delete_message, one message_id per callspamtitan_manage_allowlist and spamtitan_manage_blocklist, each with action=list. Both return the appliance-wide list — there is no per-client filter, so attribute entries to clients yourself from the sender valuesspamtitan_manage_allowlist or spamtitan_manage_blocklist using action=removespamtitan_manage_blocklist, action=add. It applies at the appliance's default scope, not a client's — confirm that is acceptable before you callsender parameter; block a sending IP in the SpamTitan admin interfaceCause: Attempting to add an entry that already exists in the list Solution: Call the same tool with action=list to check existing entries before adding
actionCause: action is the only required parameter, and it was omitted Solution: The server elicits it interactively. An unattended agent cannot answer, so pass action explicitly on every call
senderCause: action=add or action=remove without a sender Solution: The handler returns 'sender' is required when action is 'add' (or 'remove'). Supply it; sender is ignored only for action=list
Cause: Attempting to remove an entry that doesn't exist or uses a different format than what was added Solution: Call action=list and use the exact sender value that appears in the response
Cause: Submitting an improperly formatted email address or domain Solution: Ensure domains use the @domain.com format and email addresses include both local part and domain. IP entries are not addressable through the sender parameter — use the SpamTitan admin interface
Cause: API key does not have permission to manage lists Solution: Verify API key scope with your SpamTitan admin. There is no per-call domain scope to adjust — these tools take no domain parameter
note when adding list entries — six months from now, no one will remember why a sender was allowlistedaction=list; stale entries accumulate and become a security and maintenance burdennote on every blocklist entry (e.g., "Confirmed phishing — seen across 3 client accounts on 2026-03-02"). Since scope cannot be confined from here, treat every entry as potentially appliance-wide and write the note accordingly~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.