{
  "type": "mcp-server",
  "slug": "tenable-ot-mcp-em-edition",
  "name": "Tenable OT MCP Server (Enterprise Manager Edition)",
  "author": "John Walley (OneClearPath, Incorporated)",
  "description": "MCP server exposing Tenable OT Security data to AI clients; this EM fork adds relay routing and site-based queries.",
  "github_url": "https://github.com/dpstorey/EM-MCP",
  "license": "Apache-2.0",
  "tier": "contributed",
  "tags": [
    "tenable",
    "ot-security",
    "ics",
    "scada",
    "vulnerability-management"
  ],
  "integrations": [
    "Tenable"
  ],
  "domains": [
    "ot-iot-security"
  ],
  "date_added": "2026-08-31",
  "last_reviewed": "2026-09-01",
  "transport": "http",
  "runtime": "python",
  "auth_method": "token",
  "compatible_clients": [
    "Claude Desktop",
    "Claude Code",
    "Cursor",
    "Windsurf",
    "ChatGPT",
    "VS Code Copilot"
  ],
  "tools_exposed": [
    {
      "name": "query_assets",
      "description": "Query OT assets"
    },
    {
      "name": "get_asset",
      "description": "Get one OT asset"
    },
    {
      "name": "get_asset_vulnerabilities",
      "description": "Get vulnerabilities for one asset"
    },
    {
      "name": "list_custom_fields",
      "description": "List configured custom fields"
    },
    {
      "name": "query_attack_pathways",
      "description": "Query attack-pathway data (relational, not computed)"
    },
    {
      "name": "query_vulnerability_clusters",
      "description": "Query vulnerability clusters (relational join, not computed)"
    },
    {
      "name": "query_temporal_patterns",
      "description": "Query temporal patterns (event sequence, not motif analysis)"
    },
    {
      "name": "get_asset_intelligence",
      "description": "Get asset intelligence bundle (joined data, not narrative)"
    },
    {
      "name": "list_paired_icps",
      "description": "List paired ICP appliances via EM"
    },
    {
      "name": "query_events",
      "description": "Query OT events"
    },
    {
      "name": "get_event",
      "description": "Get one OT event"
    },
    {
      "name": "list_asset_groups",
      "description": "List asset groups (active)"
    },
    {
      "name": "list_archived_asset_groups",
      "description": "List archived asset groups"
    },
    {
      "name": "get_asset_group",
      "description": "Get an asset group by id"
    },
    {
      "name": "list_email_groups",
      "description": "List email groups"
    },
    {
      "name": "get_email_group",
      "description": "Get an email group by id"
    },
    {
      "name": "find_email_groups_using_smtp_server",
      "description": "Find email groups that route through a given SMTP server"
    },
    {
      "name": "list_schedule_groups",
      "description": "List schedule groups"
    },
    {
      "name": "list_archived_schedule_groups",
      "description": "List archived schedule groups"
    },
    {
      "name": "get_schedule_group",
      "description": "Get a schedule group by id"
    },
    {
      "name": "list_tag_groups",
      "description": "List tag groups"
    },
    {
      "name": "get_tag_group",
      "description": "Get a tag group by id"
    },
    {
      "name": "list_eligible_tags",
      "description": "Discover tags eligible for a tag group"
    },
    {
      "name": "list_rule_groups",
      "description": "List rule groups"
    },
    {
      "name": "list_archived_rule_groups",
      "description": "List archived rule groups"
    },
    {
      "name": "get_rule_group",
      "description": "Get a rule group by id"
    },
    {
      "name": "list_port_groups",
      "description": "List port groups"
    },
    {
      "name": "list_archived_port_groups",
      "description": "List archived port groups"
    },
    {
      "name": "get_port_group",
      "description": "Get a port group by id"
    },
    {
      "name": "list_protocol_groups",
      "description": "List protocol groups"
    },
    {
      "name": "list_archived_protocol_groups",
      "description": "List archived protocol groups"
    },
    {
      "name": "get_protocol_group",
      "description": "Get a protocol group by id"
    },
    {
      "name": "list_user_groups",
      "description": "List user groups (ICP-level)"
    },
    {
      "name": "list_archived_user_groups",
      "description": "List archived user groups (ICP-level)"
    },
    {
      "name": "get_user_group",
      "description": "Get a user group by id (ICP-level)"
    },
    {
      "name": "list_em_user_groups",
      "description": "List user groups (Enterprise Manager level)"
    },
    {
      "name": "list_em_archived_user_groups",
      "description": "List archived user groups (Enterprise Manager level)"
    },
    {
      "name": "get_em_user_group",
      "description": "Get a user group by id (Enterprise Manager level)"
    },
    {
      "name": "create_asset_group",
      "description": "Create an asset group (tag-like grouping)"
    },
    {
      "name": "update_asset_group",
      "description": "Update an asset group's metadata or membership"
    },
    {
      "name": "archive_asset_group",
      "description": "Archive (soft-delete) an asset group"
    },
    {
      "name": "bulk_set_asset_group_display_tag",
      "description": "Bulk toggle display-tag flag on asset groups"
    },
    {
      "name": "create_email_group",
      "description": "Create an email group (alert recipient list)"
    },
    {
      "name": "update_email_group",
      "description": "Update an email group (rename, change SMTP server, or replace recipients)"
    },
    {
      "name": "archive_email_group",
      "description": "Archive (delete) an email group"
    },
    {
      "name": "create_schedule_group",
      "description": "Create a schedule group (policy window)"
    },
    {
      "name": "update_schedule_group",
      "description": "Update a schedule group"
    },
    {
      "name": "archive_schedule_group",
      "description": "Archive (delete) a schedule group"
    },
    {
      "name": "create_tag_group",
      "description": "Create a tag group (PLC controller-tag rollup)"
    },
    {
      "name": "update_tag_group",
      "description": "Update a tag group"
    },
    {
      "name": "archive_tag_group",
      "description": "Archive (delete) a tag group"
    },
    {
      "name": "create_rule_group",
      "description": "Create a rule group (IDS rule bundle)"
    },
    {
      "name": "update_rule_group",
      "description": "Update a rule group"
    },
    {
      "name": "archive_rule_group",
      "description": "Archive (delete) a rule group"
    },
    {
      "name": "create_port_group",
      "description": "Create a port group (port-range bundle for PortPolicy)"
    },
    {
      "name": "update_port_group",
      "description": "Update a port group"
    },
    {
      "name": "archive_port_group",
      "description": "Archive (delete) a port group"
    },
    {
      "name": "create_protocol_group",
      "description": "Create a protocol group (protocol+port-range bundle)"
    },
    {
      "name": "update_protocol_group",
      "description": "Update a protocol group"
    },
    {
      "name": "archive_protocol_group",
      "description": "Archive (delete) a protocol group"
    },
    {
      "name": "create_user_group",
      "description": "Create a user group (ICP-level)"
    },
    {
      "name": "edit_user_group",
      "description": "Edit a user group (ICP-level)"
    },
    {
      "name": "archive_user_group",
      "description": "Archive (delete) a user group (ICP-level)"
    },
    {
      "name": "set_user_groups",
      "description": "Reassign a user's group memberships (ICP-level)"
    },
    {
      "name": "create_em_user_group",
      "description": "Create a user group (Enterprise Manager level)"
    },
    {
      "name": "edit_em_user_group",
      "description": "Edit a user group (Enterprise Manager level)"
    },
    {
      "name": "archive_em_user_group",
      "description": "Archive (delete) a user group (Enterprise Manager level)"
    },
    {
      "name": "set_em_user_groups",
      "description": "Reassign an EM user's group memberships"
    },
    {
      "name": "list_detection_policies",
      "description": "List detection policies"
    },
    {
      "name": "query_policy_findings",
      "description": "Query policy findings"
    },
    {
      "name": "list_policy_exclusions",
      "description": "List policy exclusions"
    },
    {
      "name": "list_active_scans",
      "description": "List active scans"
    },
    {
      "name": "get_active_scan",
      "description": "Get one active scan"
    },
    {
      "name": "get_active_scan_executions",
      "description": "Get past executions of an active scan"
    },
    {
      "name": "define_active_scan",
      "description": "Define an active scan (NEW — does not run it)"
    },
    {
      "name": "edit_active_scan",
      "description": "Edit an active-scan definition"
    },
    {
      "name": "enable_active_scan",
      "description": "Enable an active scan"
    },
    {
      "name": "disable_active_scan",
      "description": "Disable an active scan"
    },
    {
      "name": "delete_active_scan",
      "description": "Delete an active-scan definition"
    },
    {
      "name": "define_port_scan",
      "description": "Define a port-scan job (NEW — does not run it)"
    },
    {
      "name": "edit_port_scan",
      "description": "Edit a port-scan job"
    },
    {
      "name": "define_snmp_scan",
      "description": "Define an SNMP scan job (NEW — does not run it)"
    },
    {
      "name": "edit_snmp_scan",
      "description": "Edit an SNMP scan job"
    },
    {
      "name": "define_controller_discovery_scan",
      "description": "Define a controller-discovery scan (NEW — does not run it)"
    },
    {
      "name": "edit_controller_discovery_scan",
      "description": "Edit a controller-discovery scan job"
    },
    {
      "name": "define_asset_discovery_scan",
      "description": "Define an asset-discovery scan (NEW — does not run it)"
    },
    {
      "name": "edit_asset_discovery_scan",
      "description": "Edit an asset-discovery scan job"
    },
    {
      "name": "define_inactive_probing_scan",
      "description": "Define an inactive-probing scan (NEW — does not run it)"
    },
    {
      "name": "edit_inactive_probing_scan",
      "description": "Edit an inactive-probing scan job"
    },
    {
      "name": "edit_subnets_discovery_scan",
      "description": "Edit the subnets-discovery scan"
    },
    {
      "name": "list_sensors",
      "description": "List sensors"
    },
    {
      "name": "tenable_ot_status",
      "description": "Check Tenable OT connection"
    },
    {
      "name": "summarize_environment",
      "description": "Summarize the OT environment"
    },
    {
      "name": "list_segments_and_zones",
      "description": "List network segments and zones"
    },
    {
      "name": "get_communication_paths",
      "description": "Get communication paths for an asset"
    },
    {
      "name": "query_vulnerability_findings",
      "description": "Query vulnerability findings"
    },
    {
      "name": "query_vulnerabilities",
      "description": "Query OT vulnerabilities"
    },
    {
      "name": "get_vulnerability",
      "description": "Get one vulnerability"
    },
    {
      "name": "hide_asset",
      "description": "Hide an OT asset (filter from default views)"
    },
    {
      "name": "restore_asset",
      "description": "Restore a hidden OT asset"
    },
    {
      "name": "bulk_hide_assets",
      "description": "Bulk-hide assets matching a filter"
    },
    {
      "name": "bulk_restore_assets",
      "description": "Bulk-restore assets matching a filter"
    },
    {
      "name": "remove_assets_by_address",
      "description": "Remove asset entries by IP address"
    },
    {
      "name": "recalculate_asset_risk",
      "description": "Recalculate one asset's risk score"
    },
    {
      "name": "recalculate_all_risk",
      "description": "Recalculate risk across the deployment"
    },
    {
      "name": "update_asset",
      "description": "Edit an OT asset's properties"
    },
    {
      "name": "bulk_edit_assets",
      "description": "Bulk-edit OT assets matching a filter"
    },
    {
      "name": "reset_asset_metadata",
      "description": "Reset one asset's operator-set metadata"
    },
    {
      "name": "create_custom_field",
      "description": "Create a custom-field slot"
    },
    {
      "name": "rename_custom_field",
      "description": "Rename a custom-field slot"
    },
    {
      "name": "delete_custom_field",
      "description": "Delete a custom-field slot"
    },
    {
      "name": "enable_detection_policy",
      "description": "Enable a detection policy"
    },
    {
      "name": "disable_detection_policy",
      "description": "Disable a detection policy"
    },
    {
      "name": "archive_detection_policy",
      "description": "Archive a detection policy"
    },
    {
      "name": "enable_detection_policies",
      "description": "Bulk enable detection policies"
    },
    {
      "name": "disable_detection_policies",
      "description": "Bulk disable detection policies"
    },
    {
      "name": "archive_detection_policies",
      "description": "Bulk archive detection policies"
    },
    {
      "name": "create_activity_exclusion",
      "description": "Create activity exclusion"
    },
    {
      "name": "create_conversation_exclusion",
      "description": "Create conversation exclusion"
    },
    {
      "name": "delete_exclusion",
      "description": "Delete policy exclusion"
    },
    {
      "name": "resolve_findings",
      "description": "Resolve detection findings"
    }
  ],
  "resources_exposed": [],
  "prompts_exposed": [],
  "repo": {
    "found": true,
    "archived": false,
    "pushed_at": "2026-11-05T17:51:00Z",
    "stars": 0,
    "forks": 0,
    "open_issues": 0,
    "owner_type": "user",
    "language": "Python",
    "checked_at": "2026-11-05T20:35:15.821Z"
  },
  "url": "https://exchange.tenable.com/mcp-servers/tenable-ot-mcp-em-edition",
  "json_url": "https://exchange.tenable.com/api/mcp-servers/tenable-ot-mcp-em-edition.json",
  "markdown_url": "https://exchange.tenable.com/mcp-servers/tenable-ot-mcp-em-edition.md",
  "source_url": "https://github.com/tenable/cyberagents-exchange/blob/main/mcp-servers/tenable-ot-mcp-em-edition.md"
}