oci ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2stdioApache-2.0updated 8d ago
MCP server for Mailprotector ā email security management for MSPs (CloudFilter, Bracket, SafeSend, XtraMail): customers, domains, users, quarantine, allow/block rules, logs, configuration, and the full long-tail API via a router.
What can you do with Mailprotector?
mailprotector-mcp
MCP server for Mailprotector ā email security management for MSPs (CloudFilter, Bracket, SafeSend, XtraMail): customers, domains, users, quarantine, allow/block rules, logs, configuration, and the full long-tail API via a router.
Built on the MCP 2026-07-28 spec via the split v2 SDK
(@modelcontextprotocol/server / /node / /client ^2.0.0-beta.5) with dual-era
serving: one shared McpServerFactory behind createMcpHandler({ legacy: 'stateless' })
answers both 2025-era initialize-handshake clients (the WYRE gateway today) and modern
2026-07-28 envelope clients ā with an identical, deterministic 22-tool surface for every
caller. Ships as a GHCR container only (no MCPB bundle).
Tools (22 first-class + routed long tail)
Router: mailprotector_status, mailprotector_list_categories,
mailprotector_list_category_tools, mailprotector_execute_tool.
Promoted reads: mailprotector_customers_list/get, mailprotector_domains_list/get,
mailprotector_users_list/get/find_by_address, mailprotector_user_groups_list,
mailprotector_messages_list, mailprotector_allow_block_rules_list,
mailprotector_logs_list, mailprotector_configuration_get.
Promoted writes: mailprotector_customers_create, mailprotector_domains_create,
mailprotector_messages_release / release_many (ā HIGH-IMPACT),
mailprotector_allow_block_rules_create (ā HIGH-IMPACT), and the
ā DESTRUCTIVE ā IRREVERSIBLE mailprotector_allow_block_rules_delete.
Router categories (52 routed operations via mailprotector_execute_tool):
resellers (CRUD), customers (update/delete), domains
(update/delete/move/aliases), user_groups (CRUD + services), users
(create/create_many/update/delete/reset_password/aliases), managers (CRUD +
notification destinations), configuration (update), statements,
email_routing (destinations/sources for domain|user_group), user_syncs
(CRUD + schedule + filters), notifications (user notification destinations),
results (find_by_code). Every routed delete is ā DESTRUCTIVE and
confirmation-gated; discover schemas with mailprotector_list_category_tools.
Scoped tools
Mailprotector's hierarchy is Provider ā Reseller ā Customer ā Domain ā User Group ā User,
and many operations exist at several scopes. Scoped tools take scope
(reseller | customer | domain | user_group | user, per-tool subsets) plus scope_id;
scope_id defaults to the bound reseller when scope is "reseller".
Delete confirmations (MRTR elicitation)
Every delete flows through the SDK v2 MRTR seam: the handler returns
input_required, interactive clients see a confirmation prompt, and declining
cancels the delete. Callers that declared no elicitation capability ā including
stateless 2025-era callers such as the WYRE Conduit gateway ā fall back to
proceeding per the integration contract: elicitation here is purely additive,
and the gateway enforces destructive-tool access with its own server-side
per-tool classification gate.
Credentials
| Env var (env mode) | Gateway header (AUTH_MODE=gateway) |
Notes |
|---|---|---|
MAILPROTECTOR_API_KEY |
X-Mailprotector-Api-Key |
Per manager-role, from the web console profile page. Sent as Authorization: Bearer. |
MAILPROTECTOR_RESELLER_ID |
X-Mailprotector-Reseller-Id |
The MSP's reseller id ā the default scope for scoped tools. |
MAILPROTECTOR_BASE_URL (optional) |
ā | Default https://emailservice.io. |
In gateway mode a request missing either header (or with a non-numeric reseller id) is
answered 401 (JSON-RPC error -32001) before the MCP handler runs ā it never falls
through to env credentials.
Running
export NODE_AUTH_TOKEN=$(gh auth token) # GitHub Packages auth for @wyre-ai/* + @wyre-technology/*
npm install
npm run build
node dist/index.js # stdio (default)
MCP_TRANSPORT=http node dist/index.js # HTTP on :8080 (/mcp, /health)
node scripts/smoke-dual-era.mjs # proves both protocol eras serve the same tools
Docker (linux/amd64 per fleet law):
docker build --platform linux/amd64 --build-arg NODE_AUTH_TOKEN=$(gh auth token) -t mailprotector-mcp .
docker run -p 8080:8080 -e AUTH_MODE=env \
-e MAILPROTECTOR_API_KEY=... -e MAILPROTECTOR_RESELLER_ID=... mailprotector-mcp
Wire notes (expected dual-era behavior)
- Legacy-era POST responses are SSE-framed (
text/event-stream) ā parse the lastdata:line. - Legacy GET/DELETE session operations answer 405: stateless serving has no sessions.
License
Apache-2.0
Install
Add Mailprotector to your client. Pick the one you use.
claude mcp add ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2 -- docker run -i --rm ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2codex mcp add ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2 -- docker run -i --rm ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2amp mcp add ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2 -- docker run -i --rm ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2{
"mcpServers": {
"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2","command":"docker","args":["run","-i","--rm","ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2": {
"type": "local",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"ghcr-io-wyre-ai-mailprotector-mcp-v1-0-2": {
"command": {
"path": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2"
]
}
}
}
}Add to your Zed `settings.json`.
docker run -i --rm ghcr.io/wyre-ai/mailprotector-mcp:v1.0.2Run `goose configure`, choose **Add Extension ā Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance19/25
- Trust16/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 1 days ago
- Has a release history
- Repository is not archived
- Licensed Apache-2.0
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint ā no local install
Version history
| Versions | Published |
|---|---|
| 1.0.2Latest | Aug 26, 2026 |