WYRE-AI/msp-claude-plugins/msp-claude-plugins/spamtitan/spamtitan/skills/lists/SKILL.md
SpamTitan Lists
SpamTitan sender allowlists and blocklists: the add/remove/list action parameter, entry types, allowlisting trusted senders to prevent false positives, blocking unwanted senders and domains, and the scoping limit — neither manage tool takes a domain parameter.
- Source repository stars
- 42
- Declared platforms
- 0
- Static risk flags
- 0
- Last source update
- 2026-08-28
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
SpamTitan sender allowlists and blocklists: the add/remove/list action parameter, entry types, allowlisting trusted senders to prevent false positives, blocking unwanted senders and domains, and the scoping limit — neither manage tool takes a domain parameter.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/spamtitan/spamtitan/skills/lists"Inspect the Agent Skill "SpamTitan Lists" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/spamtitan/spamtitan/skills/lists/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Anti-triggers
Deciding what to do with a message already sitting in quarantine —
Deciding what to do with a message already sitting in quarantine —Blocking a sender in another vendor's engine — sender lists do notMail-flow rules inside the tenant — these lists live in the - 02
Key Concepts
The allowlist contains senders whose email is delivered directly to users' inboxes, bypassing spam scoring. Use the allowlist for:
Legitimate business partners whose emails are frequently misclassified as spamBulk notification systems (monitoring alerts, business SaaS tools) that trigger spam rulesInternal relay servers or third-party mailing services used by the client - 03
Allowlist (Trusted Senders)
The allowlist contains senders whose email is delivered directly to users' inboxes, bypassing spam scoring. Use the allowlist for:
Legitimate business partners whose emails are frequently misclassified as spamBulk notification systems (monitoring alerts, business SaaS tools) that trigger spam rulesInternal relay servers or third-party mailing services used by the client - 04
Blocklist (Blocked Senders)
The blocklist causes matching emails to be immediately rejected or quarantined, regardless of their spam score. Use the blocklist for:
Known spam campaigns with persistent sending addressesDomains that have been identified as malicious or compromisedSenders that bypass spam scoring with low-score messages but are clearly unwanted - 05
Entry Types
The sender parameter on both tools accepts:
Email address — e.g., [email protected] — matches only that exact addressDomain — e.g., @example.com — matches all senders from that domainThe sender parameter on both tools accepts:
Permission review
Static risk signals and limitations
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 95/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 42 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- WYRE-AI/msp-claude-plugins
- Skill path
- msp-claude-plugins/spamtitan/spamtitan/skills/lists/SKILL.md
- Commit
- 5005f73ba2f52cd299f58aa6bb79f4e70ae87103
- License
- Apache-2.0
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
SpamTitan Sender List Management
Overview
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.
Anti-triggers
- Deciding what to do with a message already sitting in quarantine —
use
SpamTitan Quarantine. - Blocking a sender in another vendor's engine — sender lists do not
federate. Ironscales keeps its own allowlist behind
IRONSCALES Incidents, and every other gateway keeps its own too; allowlisting here changes nothing anywhere else. - Mail-flow rules inside the tenant — these lists live in the
SpamTitan gateway, upstream of Exchange Online. Forwarding, inbox
rules, and mailbox-level mail flow are
Microsoft 365 Mailboxesorcipp-mailboxes.
Key Concepts
Allowlist (Trusted Senders)
The allowlist contains senders whose email is delivered directly to users' inboxes, bypassing spam scoring. Use the allowlist for:
- Legitimate business partners whose emails are frequently misclassified as spam
- Bulk notification systems (monitoring alerts, business SaaS tools) that trigger spam rules
- Internal relay servers or third-party mailing services used by the client
- Vendors with IP-based reputation issues beyond their control
Caution: Allowlisting bypasses spam filtering entirely. Only allowlist senders you have explicitly verified as legitimate. Attackers frequently spoof trusted sender addresses.
Blocklist (Blocked Senders)
The blocklist causes matching emails to be immediately rejected or quarantined, regardless of their spam score. Use the blocklist for:
- Known spam campaigns with persistent sending addresses
- Domains that have been identified as malicious or compromised
- Senders that bypass spam scoring with low-score messages but are clearly unwanted
- Former vendors or partners whose mail is no longer wanted
Entry Types
The sender parameter on both tools accepts:
- Email address — e.g.,
[email protected]— matches only that exact address - Domain — e.g.,
@example.com— matches all senders from that domain
The appliance also supports IP-based entries, but this connector's sender
parameter is documented for addresses and domains only
(spamtitan-mcp/src/domains/lists.ts:30-34). Add IP entries in the SpamTitan
admin interface.
Per-Domain vs. Global Lists
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.
But this connector cannot express that distinction.
spamtitan_manage_allowlist and spamtitan_manage_blocklist take only
action, sender, and note (spamtitan-mcp/src/domains/lists.ts:15-79).
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.
API Patterns
List Allowlist Entries
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, orlistsender— Email address or domain. Required by the handler foraddandremove; ignored forlistnote— Free-text reason recorded with the entry (foradd)
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.
Add or Remove Allowlist Entries
Same tool, different action.
spamtitan_manage_allowlist
Parameters:
action— Required.add,remove, orlistsender— The sender address or domain (e.g.[email protected]or@example.com). Required foraddandremovenote— Reason for adding (strongly recommended for audit trail; applies toadd). Singularnote, notnotes
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]"
}
List Blocklist Entries
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, orlistsender— Required foraddandremovenote— Free-text reason (foradd)
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"
}
]
}
Add or Remove Blocklist Entries
spamtitan_manage_blocklist
⚠ HIGH-IMPACT — the server marks this tool
destructiveHint: trueand 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, orlistsender— The sender address or domain to block (e.g.[email protected]or@evil.com). Required foraddandremovenote— Reason for blocking (required as audit-trail practice, optional to the API). Singularnote, notnotes
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]"
}
Common Workflows
Resolving a Quarantine False Positive with Allowlisting
- Identify the falsely quarantined sender via the quarantine queue
- Confirm the sender is legitimate by reviewing headers, links, and content
- Call
spamtitan_manage_allowlistwithaction=listto check if the sender is already listed (may need to be updated) - Call
spamtitan_manage_allowlistwithaction=addand thesenderaddress or domain - Release the quarantined message with
spamtitan_release_message— a separate call; release does not allowlist - Document the allowlist entry with a clear
notevalue explaining why the sender is trusted
Blocking a Persistent Spam Campaign
- Identify the spam sender from the quarantine queue or a user complaint
- Check if other clients are receiving the same mail (cross-domain pattern)
- Recognise that you cannot choose the scope from here — these tools take no
domainparameter, 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 instead - Call
spamtitan_manage_blocklistwithaction=add, thesender, and a descriptivenote. Get a human to confirm first — this is the high-impact tool - If blocking a domain rather than a single address, confirm the domain is not a legitimate shared sending service (e.g., never block
@gmail.com) - Delete any existing quarantined messages from the same sender with
spamtitan_delete_message, onemessage_idper call
Reviewing and Auditing List Entries
- Call
spamtitan_manage_allowlistandspamtitan_manage_blocklist, each withaction=list. Both return the appliance-wide list — there is no per-client filter, so attribute entries to clients yourself from the sender values - Review entries older than 6 months — vendors and partners may have changed, and allowlist entries should be periodically revalidated
- Look for overly broad domain allowlists that may create a security risk (e.g., allowlisting an entire popular domain)
- Remove stale entries with
spamtitan_manage_allowlistorspamtitan_manage_blocklistusingaction=remove - Document the review in the client's PSA ticket for compliance records
Blocking After a Phishing Campaign
- After identifying and deleting a phishing campaign in the quarantine queue, note the sending domain
- Add the sending domain with
spamtitan_manage_blocklist,action=add. It applies at the appliance's default scope, not a client's — confirm that is acceptable before you call - IP-based entries are not expressible through this connector's
senderparameter; block a sending IP in the SpamTitan admin interface - Check whether any related domains (typosquats or same registrant) should also be blocked
- Verify the block is effective by checking subsequent quarantine entries — the sender should no longer appear
Error Handling
Duplicate Entry
Cause: 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
Missing action
Cause: 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
Missing sender
Cause: 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
Entry Not Found on Remove
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
Invalid Entry Format
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
Permission Denied
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
Best Practices
- Always provide a
notewhen adding list entries — six months from now, no one will remember why a sender was allowlisted - Prefer allowlisting specific email addresses over entire domains when possible; domain allowlisting is a broader trust grant
- Never allowlist based on a user's request alone — always verify the sender is legitimate before adding
- Review allowlists and blocklists quarterly with
action=list; stale entries accumulate and become a security and maintenance burden - Document the threat intelligence source in the
noteon 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 - Be cautious about blocking shared sending services (SendGrid, Mailchimp, etc.) — block the specific sending address or subdomain, not the entire service
- Cross-reference blocklist additions with allowlists — a sender cannot be in both lists simultaneously
Related Skills
- api-patterns - Authentication, pagination, and error handling
- quarantine - Quarantine queue management where list decisions originate
Frequently asked questions
What to verify before installation and use
What does the SpamTitan Lists source document cover?
SpamTitan sender allowlists and blocklists: the add/remove/list action parameter, entry types, allowlisting trusted senders to prevent false positives, blocking unwanted senders and domains, and the scoping limit — neither manage tool takes a domain parameter.
How do I install SpamTitan Lists?
The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/spamtitan/spamtitan/skills/lists". Inspect the command and pinned source before running it.
Alternatives
Compare before choosing
coreyhaines31/marketingskills
ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
garrytan/gbrain
bulk-ingestion
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
app-store-optimization
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
migrate-vstest-to-mtp
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing