Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Users And Groups

ASecurity

User groups as the service container (services get/update with its deactivate-what-you-omit semantics), user CRUD including create_many and find_by_address, user aliases, password resets, and user syncs — LDAP/AD source creation, Entra/Google console-only sources, sync schedules, and comparison-type filters.

48 stars
0 votes
0 copies
0 views
Added 10/2/2026
ai-agentsgoapi

Works with

api

Security Analysis

A100/100

Scanned 10/2/2026

$npx -y skills add wyre-technology/msp-claude-plugins --skill users-and-groups --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Users And Groups?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Users And Groups
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wyre-technology-users-and-groups/badge)](https://www.skillsdirectory.com/skills/wyre-technology-users-and-groups)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: "Mailprotector Users & Groups"
description: >
  User groups as the service container (services get/update with its
  deactivate-what-you-omit semantics), user CRUD including create_many and
  find_by_address, user aliases, password resets, and user syncs — LDAP/AD
  source creation, Entra/Google console-only sources, sync schedules, and
  comparison-type filters.
when_to_use: >-
  When managing Mailprotector user groups, users, aliases, services, or
  directory syncs. Use when: mailprotector user, user group, create users,
  find by address, user alias, reset password, user sync, AD sync, Entra
  sync, LDAP sync, mailprotector services, provision bracket.
---

# Mailprotector Users & Groups

## Overview

Users live in user groups; user groups live under domains and are the
unit of **service provisioning** — which products (CloudFilter, Bracket,
SafeSend, XtraMail, SecureStore, hosting) a set of users gets. Manual
user CRUD and directory sync are alternative population strategies for
the same groups.

## Key Concepts

| Concept | Detail |
|---------|--------|
| User group | `{id, name, domain, user_count}` — created under a domain with just `name` |
| Services | Per user group; split into one `hosting` option plus any number of `addons` |
| `user_type` | `1` User, `2` Alias, `3` Mailing List, `11` Unlicensed User |
| Primary address | Generated as `<name>@<domain>`; one extra address per domain alias |
| User sync | Domain-level directory import into a `destination_user_group` |
| Sync source types | `UserSync::LdapSource` (API-creatable), `UserSync::GoogleSource` and `UserSync::MicrosoftGraphSource` (Entra/O365 — **console-only**) |

## Common Workflows

### User groups and services

1. Create: `POST /domains/{domain_id}/user_groups` `{"name": "..."}`;
   list with `mailprotector_user_groups_list`.
2. Read services: `GET /user_groups/{user_group_id}/services` → array of
   `{id, service_type, user_group, domain}`.
3. Update services: `PUT /user_groups/{user_group_id}/services` with

   ```json
   {"service_types": {"hosting": "other", "addons": ["bracket", "securestore"]}}
   ```

   One `hosting` value, any number of `addons`. **Any currently active
   service not present in the body is deactivated** — always GET the
   current services, merge, then PUT the full desired set.
4. Rename: `PUT /user_groups/{id}`; delete: `DELETE /user_groups/{id}` —
   **deletes every user in the group**. Move users to another group
   first to preserve them.

### Creating users

- Single: `POST /user_groups/{user_group_id}/users` with
  `{"name": "username", "password": "...", "first_name": "...",
  "last_name": "...", "user_type_id": 1, "aliases": ["alias1"]}`.
  Responds 201 with an **array** containing the created user.
- Bulk: `POST /user_groups/{user_group_id}/users/create_many` with
  `{"users": [ {...}, {...} ]}` — same per-user shape.
- Each user gets `<name>@<domain>` plus one address per domain alias.
- Lookup: `mailprotector_users_list` (filterable, e.g.
  `?first_name=Bob`), `mailprotector_users_get`, and
  `mailprotector_users_find_by_address`
  (`POST /users/find_by_address` `{"address": "someone@domain.com"}`) —
  searching an alias address returns the **root** user.

### Maintaining users

- Update: `PUT /users/{user_id}` — `first_name`, `last_name`, `phone`,
  `user_type_id`.
- Reset password: `POST /users/{user_id}/reset_password`
  `{"password": "..."}` — sets it to the supplied value (high-impact;
  confirm with the operator).
- Delete: `DELETE /users/{user_id}` — irreversible.
- Aliases: `GET /users/{user_id}/aliases`;
  `POST /users/{user_id}/aliases` with the **nested** body
  `{"alias": {"name": "alias-username"}}` (unlike the flat `aliases`
  array on user create). The parent must be `user_type` "User" —
  mailing lists and equipment accounts cannot take aliases. An alias
  address is created for the domain and each domain alias.

### Directory sync (AD / Entra)

1. List: `GET /domains/{domain_id}/user_syncs`; single:
   `GET /user_syncs/{user_sync_id}`.
2. Create (LDAP/AD only):
   `POST /domains/{domain_id}/user_syncs` with
   `destination_user_group_id`, `source_type: "UserSync::LdapSource"`,
   `enabled: "true"`, and
   `source: {host, port, use_ssl, username, password, search_base}`.
   New syncs are **disabled by default** unless `enabled` is passed.
   Google Workspace and Microsoft Graph (Entra ID / Office 365) sources
   must be provisioned in the web console — but once they exist, their
   schedule and filters are managed via the API like any other sync.
3. Schedule (per domain, not per sync):
   `GET`/`PUT /domains/{domain_id}/user_sync_schedule` with
   `{"interval": 30, "enabled": true}` — `interval` is minutes between
   runs; the response carries `last_run_at`/`next_run_at`.
4. Filters: `GET`/`POST /user_syncs/{user_sync_id}/filters` with
   `{"field": "Department", "value": "Accounting", "filter_group":
   "all", "comparison_type_id": 1}`; delete via
   `DELETE /user_sync_filters/{id}`. `filter_group` is `all` (AND) or
   `any` (OR). Comparison types:

   | id | Comparison | id | Comparison |
   |----|------------|----|------------|
   | 1 | Equals | 5 | Contains |
   | 2 | Does not equal | 6 | Does not contain |
   | 3 | Greater than | 7 | Matches |
   | 4 | Less than | 8 | Does not match |

## Gotchas

- **The services PUT is declarative, not additive.** Omitting an active
  addon deactivates it. This is the highest-risk write in this skill —
  read-merge-write, always.
- **Sync health**: `alive: false` on a sync means the source stopped
  answering; check host/credentials before touching filters.
- **`enabled` on sync create is the string `"true"`** in the documented
  body; the update accepts a boolean. Send what the endpoint shows.
- **User create returns an array**, even for a single user — index
  `[0]` for the created record.
- **Deleting a user group deletes its users** — the API will not warn.

## Related Skills

- [customers-and-domains](../customers-and-domains/SKILL.md) — the domain must be Active before users receive mail
- [quarantine-and-messages](../quarantine-and-messages/SKILL.md) — per-user quarantine once users exist

Attribution

WYRE-AIWYRE-AI
View sourceSee grades on GitHubMore from wyre-technology →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698621 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →