fortimail-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP port | 3000 |
| REDIS_URL | No | Redis URL | redis://127.0.0.1:6379 |
| TRANSPORT | No | stdio or http | stdio |
| MCP_HTTP_HOST | No | Bind address for HTTP | 0.0.0.0 |
| MCP_HTTP_API_KEY | No | If set, POST /mcp may use X-API-Key | |
| FORTIMAIL_ENGINE_URL | Yes | Engine base URL including /v1 | |
| FORTIMAIL_VERIFY_CERT | No | Set false to skip TLS verification (dev only) | verify |
| MCP_HTTP_BEARER_TOKEN | No | If set, POST /mcp requires Authorization: Bearer | |
| FORTIMAIL_CACHE_BACKEND | No | memory or redis | memory |
| FORTIMAIL_ENGINE_API_KEY | Yes | Bearer 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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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: |
| 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: |
| fortimail.domains.createA | Purpose: Create a domain via the engine ( |
| fortimail.domains.updateB | Purpose: Partial update ( |
| fortimail.domains.deleteA | Purpose: Delete a domain ( |
| fortimail.domains.info.getC | Purpose: Customer/account metadata ( |
| fortimail.domains.info.updateA | Purpose: Update metadata ( |
| fortimail.users.listA | Purpose: List mailbox users for a domain ( |
| fortimail.users.getB | Purpose: Fetch one user ( |
| fortimail.users.createA | Purpose: Create mailbox user ( |
| fortimail.users.updateA | Purpose: |
| fortimail.users.deleteA | Purpose: |
| fortimail.users.maps.listC | Purpose: |
| fortimail.users.maps.getA | Purpose: Find one map by listing |
| fortimail.users.maps.createB | Purpose: |
| fortimail.users.maps.updateB | Purpose: |
| fortimail.users.maps.deleteA | Purpose: |
| 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: |
| fortimail.queue.searchB | Purpose: |
| fortimail.queue.viewC | Purpose: |
| fortimail.queue.deleteB | Purpose: |
| fortimail.queue.rerouteD | Purpose: |
| fortimail.queue.downloadD | Purpose: Not exposed on the FortiMail Engine OpenAPI in this MCP version. Returns: Error guidance. |
| fortimail.reports.listC | Purpose: |
| fortimail.reports.downloadC | Purpose: |
| fortimail.reports.deleteC | Purpose: |
| fortimail.reports.generate.mail_statsC | Purpose: |
| fortimail.reports.generate.domain_mail_statsD | Purpose: |
| fortimail.reports.generate.mailbox_statsC | Purpose: |
| fortimail.logs.listC | Purpose: |
| fortimail.logs.downloadC | Purpose: |
| fortimail.smtp.config.getC | Purpose: |
| fortimail.smtp.config.updateD | Purpose: |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| fortimail_incident_triage | Structured starter prompt for mail or security incidents when operating FortiMail via this MCP. |
| fortimail_queue_investigation | Step-by-step prompt for diagnosing stuck or deferred messages in the FortiMail mail queue. |
| fortimail_domain_audit | Audit a protected domain's configuration, user list, and profile assignments on FortiMail. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| fortimail_mcp_about | Short overview of this MCP: FortiMail Engine API client over Streamable HTTP; tools map to OpenAPI `/v1` routes. |
TDQS
Scored across 56 tools
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.
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.
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.
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.