eSentire Atlas MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_AUTH | No | none | bearer | oauth/azure | github | none |
| MCP_HOST | No | Bind address | 0.0.0.0 |
| MCP_PORT | No | Bind port | 3000 |
| LOG_LEVEL | No | Logging level | info |
| TI_CACHE_TTL | No | Seconds. Matches the feed's hourly refresh | 3600 |
| MCP_TRANSPORT | No | http or stdio | http |
| MCP_PUBLIC_URL | No | External URL; required for OAuth | |
| ATLAS_API_TOKEN | No | Atlas credential (Findings / Ticketing / MVS) | |
| AZURE_CLIENT_ID | No | Entra app client ID for MCP_AUTH=oauth | |
| AZURE_TENANT_ID | No | Entra app tenant ID for MCP_AUTH=oauth | |
| MCP_BEARER_TOKEN | No | Shared secret when MCP_AUTH=bearer | |
| ESENTIRE_API_BASE | No | API root | https://api.esentire.com |
| ESENTIRE_TI_TOKEN | No | Threat Intelligence credential | |
| ESENTIRE_READ_ONLY | No | 1 refuses every mutating call at the door | false |
| MAX_RESPONSE_CHARS | No | Per-tool response ceiling | 40000 |
| AZURE_CLIENT_SECRET | No | Entra app client secret for MCP_AUTH=oauth | |
| ESENTIRE_CUSTOMER_CODE | No | Default tenant code, so callers can omit it | |
| ESENTIRE_ENABLED_SURFACES | No | Comma list; drop mvs if not licensed | findings,tickets,ti,mvs |
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
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| findings_searchC | Search eSentire Findings (detections/alerts) for a date range. This is the API behind the Findings table in the Atlas platform. |
| findings_search_advancedA | POST variant of the Findings search, for filter payloads too large for a query string. |
| finding_updateC | Update an existing Finding (WRITE). |
| tickets_case_type_configsA | List the valid case_type / case_subtype / service combinations. Always call this before creating a case. The taxonomy is server-driven and changes without notice, so hardcoding subtypes leads to rejected creates. |
| tickets_list_casesB | List cases from eSentire's ticketing system. |
| tickets_get_caseA | Get one case in full. |
| tickets_create_caseA | Create a new case in eSentire's ticketing system (WRITE -- reaches the real SOC). This opens a genuine support case with eSentire. Confirm intent with a human before calling it. Validate case_type/case_subtype/service against tickets_case_type_configs first; invalid combinations are rejected. |
| tickets_update_caseA | Update a case: add comments, set customer fields, or resolve it (WRITE). Resolving is reversible; closing is not. Prefer resolve. |
| tickets_list_commentsA | List all comments on a case. The case object itself only carries the latest 5 comments; use this for the rest. |
| tickets_list_emailsB | List the email correspondence attached to a case. |
| tickets_list_attachmentsB | List the file attachments on a case. |
| tickets_get_attachment_linkA | Fetch metadata or a download link for an attachment. Atlas splits behaviour by size: files <= 5MB can come back inline, while files over 5MB return a link to secure cloud storage. This tool always requests JSON so you get metadata or a link rather than raw bytes -- binary content is not useful over MCP. |
| tickets_upload_attachmentA | Attach a file to a case (WRITE). Only handles the inline path, i.e. files <= 5MB. For anything larger, Atlas requires a two-step presigned upload that has to be driven from a real filesystem, not through an MCP tool call. |
| tickets_delete_attachmentA | Delete an attachment from a case (WRITE -- not reversible). |
| tickets_list_contactsA | List authorised contacts for your account. Use this to get an exact contact value for tickets_create_case, since an unresolvable contact is silently dropped rather than rejected. |
| tickets_list_locationsA | List locations registered for your account. Same rationale as contacts: an unresolvable location is silently dropped. |
| ti_ipwatchA | Fetch the eSentire IP Watch blocklist. Returns a newline-delimited list of malicious IP addresses, suitable for pushing into a firewall or WAF blocklist. |
| ti_check_ipA | Check whether a specific IP address is on the eSentire IP Watch blocklist. |
| ti_indicatorsA | Fetch the most recent Indicator Bundles from the Threat Intelligence feed. Covers IPs, domains, URLs, file hashes and email addresses curated by eSentire's Threat Response Unit. Upstream refreshes hourly, and results are cached for that long, so calling this repeatedly inside an hour returns identical data. |
| ti_indicators_pagedA | Page through Indicator Bundles from the Threat Intelligence feed. Use this instead of ti_indicators when you need to walk the whole feed without blowing the response ceiling. |
| ti_indicators_mispB | Fetch a MISP-format indicator file from the Threat Intelligence feed. |
| mvs_list_assetsB | List discovered assets and their vulnerability counts. Asset records use UPPERCASE field names (ASSET_ID, HOSTNAME, THREAT_RATING, VULN_CRITICAL_COUNT, ...). Note there are two parallel count families: SOFTWARE_VULN_*COUNT and VULN*_COUNT. |
| mvs_get_assetA | Get full detail for one asset. |
| mvs_asset_detailsB | List a sub-resource of one asset. |
| mvs_get_asset_vulnerabilityA | Get one vulnerability as it applies to one specific asset. |
| mvs_list_vulnerabilitiesA | List the vulnerability catalogue across the whole estate. |
| mvs_get_vulnerabilityA | Get details for one vulnerability, by internal id or by CVE. |
| mvs_list_missing_patchesA | List missing patches across the whole estate. |
| mvs_assets_affected_byA | Find every asset affected by a given CVE, vulnerability, or missing patch. This is the blast-radius question: given one finding, what is exposed? Supply exactly one of cve_id, vulnerability_id, or the patch_name/patch_type pair. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
The major domains are cleanly separated by tickets_, ti_, findings/finding_, and mvs_ prefixes, and most tools target a distinct resource+action. The only mild ambiguity comes from near-variant tools such as findings_search vs findings_search_advanced and ti_indicators vs ti_indicators_paged vs ti_indicators_misp, but their descriptions explain the differences.
Most names follow a verb_noun pattern under a clear domain prefix, e.g. tickets_list_cases, mvs_get_asset, and ti_check_ip. A few deviations such as tickets_case_type_configs, mvs_asset_details, mvs_assets_affected_by, and finding_update alongside findings_search prevent a perfect score, but the style is otherwise consistent and readable.
29 tools feels heavy for an MCP surface and will consume meaningful agent context, placing the server above the ideal 3-15 range. The count is partly justified by the broad eSentire platform scope spanning cases, threat intel, findings, and MVS, but it is still borderline and could reasonably be split into separate servers.
The surface covers the core case lifecycle, findings search/update, threat-intel feeds, and MVS asset/vulnerability/patch workflows well. Minor gaps include no direct single-finding fetch and no support for attachments over 5MB, but agents can usually work around these using the existing search and metadata tools.