Skip to main content
Glama
Lynsoft

fortimail-mcp-server

by Lynsoft

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoHTTP port3000
REDIS_URLNoRedis URLredis://127.0.0.1:6379
TRANSPORTNostdio or httpstdio
MCP_HTTP_HOSTNoBind address for HTTP0.0.0.0
MCP_HTTP_API_KEYNoIf set, POST /mcp may use X-API-Key
FORTIMAIL_ENGINE_URLYesEngine base URL including /v1
FORTIMAIL_VERIFY_CERTNoSet false to skip TLS verification (dev only)verify
MCP_HTTP_BEARER_TOKENNoIf set, POST /mcp requires Authorization: Bearer
FORTIMAIL_CACHE_BACKENDNomemory or redismemory
FORTIMAIL_ENGINE_API_KEYYesBearer token (fme_...)

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
fortimail.engine.statusA

Purpose: Check connectivity to the FortiMail Engine (liveness and optional detailed readiness). When to use: After configuring env vars, or when other tools fail with network/auth errors. Inputs: detailed — if true, call /health/detailed (requires API key with sufficient scope). Returns: JSON from the engine health endpoints. Side effects: None.

fortimail.auth.logoutA

Purpose: Legacy tool name. Engine mode uses Bearer tokens only — there is no server-side MCP session to end. Returns: Short confirmation. Side effects: None.

fortimail.cache.flushA

Purpose: Clear the MCP process response cache (in-memory or Redis), not the FortiMail Engine server cache. When to use: When reads look stale after changes made elsewhere. Returns: Confirmation. Side effects: Next reads refetch from the engine.

fortimail.domains.listA

Purpose: Enumerate mail domains via the FortiMail Engine. When to use: Onboarding, audits, or before editing a domain. Inputs: None. Returns: Markdown list; truncated if very large. Side effects: None (read-only).

fortimail.domains.getB

Purpose: Load configuration for one domain. Inputs: domain — domain name (mkey). Returns: JSON. Side effects: None (read-only).

fortimail.domains.createA

Purpose: Create a domain via the engine (POST /v1/domains/{key}). Inputs: domain — name; settings — must include ip per engine schema; optional port, status, comment. Returns: API response body. Side effects: Creates domain; flushes MCP cache.

fortimail.domains.updateB

Purpose: Partial update (PUT /v1/domains/{key}). Inputs: domain; settings — fields to update. Returns: API response body. Side effects: Updates domain; flushes MCP cache.

fortimail.domains.deleteA

Purpose: Delete a domain (DELETE /v1/domains/{key}). Inputs: domain. Side effects: Destructive; flushes MCP cache.

fortimail.domains.info.getC

Purpose: Customer/account metadata (GET /v1/domain-info/{key}). Inputs: domain. Returns: JSON. Side effects: None (read-only).

fortimail.domains.info.updateA

Purpose: Update metadata (PUT /v1/domain-info/{key}). Inputs: domain; info — customer_name, customer_email, account_limit, comment. Side effects: Flushes MCP cache.

fortimail.users.listA

Purpose: List mailbox users for a domain (GET /v1/domains/{domain}/users). Inputs: domain. Returns: Markdown summary. Side effects: None (read-only).

fortimail.users.getB

Purpose: Fetch one user (GET /v1/domains/{domain}/users/{key}). Inputs: domain; key — user mkey. Side effects: None (read-only).

fortimail.users.createA

Purpose: Create mailbox user (POST /v1/domains/{domain}/users/{key}). Inputs: domain; key; optional settings — password, status, type, displayname (see engine OpenAPI). Side effects: Flushes MCP cache.

fortimail.users.updateA

Purpose: PUT /v1/domains/{domain}/users/{key}. Side effects: Flushes MCP cache.

fortimail.users.deleteA

Purpose: DELETE /v1/domains/{domain}/users/{key}. Side effects: Flushes MCP cache.

fortimail.users.maps.listC

Purpose: GET /v1/user-maps. Side effects: None (read-only).

fortimail.users.maps.getA

Purpose: Find one map by listing /v1/user-maps (no single-GET in OpenAPI). Inputs: key — internal mkey. Side effects: None (read-only).

fortimail.users.maps.createB

Purpose: POST /v1/user-maps/{key}. Body must include type per engine schema; pass map_type or full body. Side effects: Flushes MCP cache.

fortimail.users.maps.updateB

Purpose: PUT /v1/user-maps/{key}. Side effects: Flushes MCP cache.

fortimail.users.maps.deleteA

Purpose: DELETE /v1/user-maps/{key}. Side effects: Flushes MCP cache.

fortimail.profiles.geoip.listB

Purpose: List GeoIP Profile profiles via the engine. Side effects: None (read-only).

fortimail.profiles.geoip.getC

Purpose: Get one GeoIP Profile.

fortimail.profiles.geoip.createC

Purpose: Create GeoIP Profile (see engine OpenAPI for required body fields).

fortimail.profiles.geoip.updateC

Purpose: Update GeoIP Profile.

fortimail.profiles.geoip.deleteC

Purpose: Delete GeoIP Profile.

fortimail.profiles.notification.listC

Purpose: List Notification Profile profiles via the engine. Side effects: None (read-only).

fortimail.profiles.notification.getB

Purpose: Get one Notification Profile.

fortimail.profiles.notification.createC

Purpose: Create Notification Profile (see engine OpenAPI for required body fields).

fortimail.profiles.notification.updateC

Purpose: Update Notification Profile.

fortimail.profiles.notification.deleteC

Purpose: Delete Notification Profile.

fortimail.profiles.imap_auth.listC

Purpose: List IMAP Auth Profile profiles via the engine. Side effects: None (read-only).

fortimail.profiles.imap_auth.getC

Purpose: Get one IMAP Auth Profile.

fortimail.profiles.imap_auth.createC

Purpose: Create IMAP Auth Profile (see engine OpenAPI for required body fields).

fortimail.profiles.imap_auth.updateC

Purpose: Update IMAP Auth Profile.

fortimail.profiles.imap_auth.deleteC

Purpose: Delete IMAP Auth Profile.

fortimail.profiles.smtp_auth.listC

Purpose: List SMTP Auth Profile profiles via the engine. Side effects: None (read-only).

fortimail.profiles.smtp_auth.getC

Purpose: Get one SMTP Auth Profile.

fortimail.profiles.smtp_auth.createC

Purpose: Create SMTP Auth Profile (see engine OpenAPI for required body fields).

fortimail.profiles.smtp_auth.updateD

Purpose: Update SMTP Auth Profile.

fortimail.profiles.smtp_auth.deleteC

Purpose: Delete SMTP Auth Profile.

fortimail.queue.listC

Purpose: GET /v1/queue with type, offset, limit. Side effects: None (read-only).

fortimail.queue.searchB

Purpose: GET /v1/queue with optional sender, recipient, clientIp, sessionId, reason, type. Side effects: None (read-only).

fortimail.queue.viewC

Purpose: GET /v1/queue/view.

fortimail.queue.deleteB

Purpose: DELETE /v1/queue with confirmation header (see engine docs). Side effects: Destructive.

fortimail.queue.rerouteD

Purpose: POST /v1/queue/reroute.

fortimail.queue.downloadD

Purpose: Not exposed on the FortiMail Engine OpenAPI in this MCP version. Returns: Error guidance.

fortimail.reports.listC

Purpose: GET /v1/reports.

fortimail.reports.downloadC

Purpose: POST /v1/reports/download (binary payload decoded as UTF-8 text when possible).

fortimail.reports.deleteC

Purpose: DELETE /v1/reports with query params.

fortimail.reports.generate.mail_statsC

Purpose: POST /v1/reports/mail-stats.

fortimail.reports.generate.domain_mail_statsD

Purpose: POST /v1/reports/domain-stats.

fortimail.reports.generate.mailbox_statsC

Purpose: POST /v1/reports/mailbox.

fortimail.logs.listC

Purpose: GET /v1/logs?type=&limit=&offset=.

fortimail.logs.downloadC

Purpose: POST /v1/logs/download. Response bytes are interpreted as UTF-8 text (use compressed: false for plain text in MCP).

fortimail.smtp.config.getC

Purpose: GET /v1/smtp-config.

fortimail.smtp.config.updateD

Purpose: PUT /v1/smtp-config.

Prompts

Interactive templates invoked by user choice

NameDescription
fortimail_incident_triageStructured starter prompt for mail or security incidents when operating FortiMail via this MCP.
fortimail_queue_investigationStep-by-step prompt for diagnosing stuck or deferred messages in the FortiMail mail queue.
fortimail_domain_auditAudit a protected domain's configuration, user list, and profile assignments on FortiMail.

Resources

Contextual data attached and managed by the client

NameDescription
fortimail_mcp_aboutShort overview of this MCP: FortiMail Engine API client over Streamable HTTP; tools map to OpenAPI `/v1` routes.

TDQS

C2.8/5.0

Scored across 56 tools

Disambiguation4/5

Most tools map clearly to distinct resource/action pairs thanks to hierarchical namespaces like domains, users, queue, and reports. However, some overlaps remain, such as queue.list vs queue.search and multiple reports.generate.* variants, and dead/legacy tools like queue.download and auth.logout add confusion.

Naming Consistency5/5

All tool names consistently use the fortimail.* dot-namespaced lower_snake_case convention with resource-then-action structure. Variations like domains.info.get still follow the same predictable pattern.

Tool Count2/5

56 tools is heavy for an MCP surface, well beyond the typical 3-15 range and past the 25+ threshold that creates selection overhead. Although many are grouped CRUD variants for distinct resources, the count is excessive for practical agent use.

Completeness4/5

Core administrative coverage is strong: CRUD for domains, domain info, users, user maps, multiple profile types, queue operations, reports, logs, and SMTP config. Minor gaps include the non-exposed queue.download tool, legacy auth.logout, and absence of broader FortiMail policy/system operations.

Maintenance

ActivityInactive
ResponsivenessNo issues