api-patterns
3CX's native PBX MCP server: the per-PBX endpoint shape (every PBX is its own FQDN and its own OAuth authorization server — there is no shared mcp.3cx.com),…
Sender allow/block rules at all five scopes: downward inheritance (reseller rules apply to everything beneath), the listing that returns only directly-attached rules, create with `rule_type: allow|block` and address-or-domain values, and the flat delete endpoint.
$ npx -y skills add wyre-technology/msp-claude-plugins --skill allow-block-rules --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/allow-block-rulesContext preview
The summary Claude sees to decide when to auto-load this skill.
Sender allow/block rules at all five scopes: downward inheritance (reseller rules apply to everything beneath), the listing that returns only directly-attached rules, create with `rule_type: allow|block` and address-or-domain values, and the flat delete endpoint.
name: "Mailprotector Allow/Block Rules" description: > Sender allow/block rules at all five scopes: downward inheritance (reseller rules apply to everything beneath), the listing that returns only directly-attached rules, create with `rule_type: allow|block` and address-or-domain values, and the flat delete endpoint. when_to_use: >- When managing Mailprotector sender rules. Use when: allow rule, block rule, allowlist, blocklist, whitelist, blacklist, block sender, mailprotector rule_type, allow_block_rules, sender exception.
Allow/block rules override filtering per sender: an allow rule bypasses spam scoring for that sender; a block rule stops the sender's mail outright. Rules attach to any level of the hierarchy and inherit downward, so scope choice is the whole game.
| Concept | Detail | |---------|--------| | `rule_type` | Send lowercase `allow` or `block`; responses may echo `"Allow"`/`"Block"` capitalized — compare case-insensitively | | `value` | A full address (`user@domain.com`) or a bare domain (`domain.com`) — nothing else, no wildcards | | `entity` | The owner in responses: `{id, entity_type, name}` with `entity_type` `Account` (reseller **or** customer), `Domain`, `UserGroup`, or `User` | | Inheritance | A rule applies to the entity it's attached to and everything beneath it |
`mailprotector_allow_block_rules_list` with `scope` + `scope_id` → `GET /{resellers|customers|domains|user_groups|users}/{id}/allow_block_rules`.
**The listing returns only rules attached directly to that entity** — neither rules on entities beneath it nor rules inherited from above. The effective rule set for a user is the union of five listings: reseller → customer → domain → user group → user. Audit the whole chain before declaring "no rule exists for this sender".
`mailprotector_allow_block_rules_create` with `scope`, `scope_id`, and
{"value": "user@domain.com", "rule_type": "block"}→ `POST /{scope}/{scope_id}/allow_block_rules`, 201 with the rule `id`.
Pick the narrowest scope that solves the problem:
user** under the MSP — reserve it for universally-true decisions (e.g. blocking a known-abusive domain fleet-wide), and say the blast radius out loud before creating one.
`mailprotector_allow_block_rules_delete` → `DELETE /allow_block_rules/{allow_block_rule_id}` → 204. The endpoint is flat (no scope in the path) — the `id` from a listing is all you need, which also means a listing at any scope hands you enough to delete rules you can see. Deletes are irreversible; re-creating needs the original `value`/`rule_type`, so record them before deleting.
for the matched sender, and spoofed mail claiming that sender inherits the exemption. Prefer address values over whole domains, and prefer narrow scopes over wide ones.
`gmail.com` at any scope is allowing all of Gmail.
no bounce the recipient sees. A block on a shared sending service (e.g. a marketing platform's domain) takes out every legitimate customer of that service under the rule's scope.
customer in responses — resolve by the `entity.id` you queried, not the type label.
years of per-user self-service; when auditing, collapse by `value` + `rule_type` across scopes to see the real posture.
One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai
Repo: wyre-technology/msp-claude-plugins
3CX's native PBX MCP server: the per-PBX endpoint shape (every PBX is its own FQDN and its own OAuth authorization server — there is no shared mcp.3cx.com),…
3CX's live-operations surface: read-only visibility into active calls, recordings, voicemail, department and queue membership, and forwarding/presence…
3CX's read-only directory surface: resolving a caller by email or by exact extension, searching the PBX's own phonebooks, searching contacts synced from an…
3CX's system-and-configuration surface: server time, PBX event log and application log search, service status, database schema and the read-only SELECT-only…
Abnormal Security abuse mailbox cases: user-reported email submissions, case statuses and judgments, the case lifecycle, bulk and remediation actions, and…
Abnormal Security message analysis: message retrieval, email header inspection, attachments, sender reputation, delivery context, and SPF/DKIM/DMARC…