Skip to main content
Glama
AlienSec MCP Server

AlienSec MCP Server

by VRIL-LABS

AlienSec MCP 服务器

OpenSSF Scorecard

生产级 AlienVault OTX 端点安全扫描 MCP 服务器,集成 VirusTotal

License: MIT Node.js TypeScript MCP

// 为安全社区精心打造 — 资金支持维持其持续维护

GitHub Sponsors Open Collective Ko-fi Buy Me a Coffee thanks.dev


概述

AlienSec MCP 服务器 是一个生产级模型上下文协议(MCP)服务器,利用 AlienVault OTX 提供全面的端点安全扫描能力,并可选集成 VirusTotal。

该服务器使 AI 代理和应用程序能够对各种端点类型(macOS PKG、Windows PowerShell、Debian APT、Redhat RPM)执行安全扫描,并从 AlienVault OTX 和 VirusTotal API 获取威胁情报。


Related MCP server: Nullcone MCP Server

功能特性

核心能力

  • 多平台端点扫描

    • 使用 PKG 安装程序风格扫描 macOS 系统

    • 通过 PowerShell 扫描 Windows 端点

    • 使用 APT 扫描 Debian/Ubuntu 系统

    • 使用 RPM 扫描 Redhat/CentOS 系统

  • VirusTotal 集成

    • 使用 VirusTotal API 扫描文件和 URL

    • 获取现有分析结果

    • 自动限流和熔断器保护

    • 多 API 密钥支持(遵守 VirusTotal 服务条款)

  • 威胁情报

    • 搜索 AlienVault OTX 脉冲

    • 获取脉冲详情和事件

    • 访问失陷指标(IoCs)

  • 数据持久化

    • SQLite 数据库,支持可选加密

    • 带时间戳的扫描结果存储

    • API 请求日志记录

    • 熔断器事件跟踪

  • 生产级特性

    • 全面的错误处理

    • 使用 Pino 的结构化日志

    • 使用 Zod 的环境变量验证

    • 类型安全的 API 模式

    • 优雅关闭处理


前置条件

系统要求

  • Node.js:>= 22.0.0

  • npm:>= 8.0.0

  • 操作系统:macOS、Linux 或 Windows

  • 磁盘空间:依赖项至少需要 100MB

所需 API 密钥

  1. AlienVault OTX API 密钥(必需)

  2. VirusTotal API 密钥(可选,用于增强功能)

    • 在 https://www.virustotal.com 注册

    • 导航至 API 控制台

    • 生成 API 密钥

    • 注意:免费版允许每天 500 次请求,每分钟 4 次请求


安装

1. 克隆仓库

git clone https://github.com/VRIL-LABS/aliensec-mcp-server.git
cd aliensec-mcp-server

2. 安装依赖

npm install

这将安装所有生产和开发依赖。

3. 配置环境变量

复制示例环境文件并使用你的 API 密钥进行更新:

cp .env.example .env

使用你的 API 密钥编辑 .env:

# Server Configuration
NAME=aliensec-mcp-server
VERSION=1.0.0
DEBUG=false
LOG_LEVEL=info

# AlienVault OTX Configuration (Required)
ALIENVAULT_API_KEY=your_alienvault_api_key_here
ALIENVAULT_BASE_URL=https://api.agent.otxb.io
ALIENVAULT_DEFAULT_REGION=us-east-1

# VirusTotal Configuration (Optional)
VIRUSTOTAL_API_KEYS=key1,key2,key3
VIRUSTOTAL_BASE_URL=https://www.virustotal.com/api/v3
VIRUSTOTAL_RATE_LIMIT_PER_MINUTE=4
VIRUSTOTAL_DAILY_LIMIT=500
VIRUSTOTAL_CIRCUIT_BREAKER_TIMEOUT=300

# Database Configuration
DATABASE_PATH=./data/aliensec.db
DATABASE_ENCRYPTION_KEY=your_encryption_key_here
DATABASE_TIMEOUT=5000

注意:VirusTotal 服务条款禁止使用多个 API 密钥绕过速率限制。本实现遵守这些限制,仅将多个密钥用于冗余目的。

4.(可选)安装 SQLite 加密依赖

在 Linux/macOS 上启用加密数据库支持:

# Ubuntu/Debian
sudo apt-get install build-essential

# macOS
xcode-select --install

使用方法

开发模式

在自动重载的开发模式下运行服务器:

npm run dev

生产模式

构建并运行服务器:

npm run build
npm start

与 MCP 客户端配合使用

服务器通过 stdio(标准输入/输出)进行通信。要与 MCP 客户端配合使用:

# Direct execution
node dist/index.js

# Or using the npm script
npm start

MCP 客户端集成示例

import { Client } from '@modelcontextprotocol/client';
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';

const client = new Client({ name: 'my-client', version: '1.0.0' });
const transport = new StdioClientTransport({
  command: 'node',
  args: ['dist/index.js'],
});

await client.connect(transport);

// Call a scan tool
const result = await client.callTool({
  name: 'scan_macos_pkg',
  arguments: {
    target: '192.168.1.100',
    useVirusTotal: true,
  },
});

console.log(result.content);

可用工具

扫描工具(5 个)

工具

描述

参数

scan_endpoint

通用端点扫描器

flavor、target、useVirusTotal、apiKeyIndex

scan_macos_pkg

扫描 macOS PKG 安装程序

target、useVirusTotal

scan_windows

扫描 Windows 端点

target、useVirusTotal

scan_debian_apt

扫描 Debian/APT 端点

target、useVirusTotal

scan_redhat_rpm

扫描 Redhat/RPM 端点

target、useVirusTotal

VirusTotal 工具(2 个)

工具

描述

参数

use_virustotal

使用 VirusTotal 扫描资源

resource、apiKeyIndex、wait

get_virustotal_analysis

获取现有 VirusTotal 分析结果

hash、apiKeyIndex

AlienVault OTX 工具(3 个)

工具

描述

参数

get_bootstrap_command

获取指定风格的引导命令

flavor、target

get_bootstrap_urls

获取所有引导 URL

-

search_pulses

搜索 AlienVault OTX 脉冲

query、limit、offset

数据库工具(4 个)

工具

描述

参数

get_scan_stats

获取扫描统计信息

-

get_recent_scans

获取最近的扫描记录

limit

get_circuit_breaker_stats

获取熔断器统计信息

-

get_api_stats

获取 API 统计信息

-

系统工具(1 个)

工具

描述

参数

get_health

获取服务器健康状态

-


引导命令

服务器为每种端点风格提供预配置的引导命令。下面的 <api-key> 是你解析后的 ALIENVAULT_API_KEY 值,TARGET=<target> 仅在提供 target 时包含。

macOS PKG 安装程序

API_KEY=<api-key> [TARGET=<target>] bash -c "$(curl -s https://api.agent.otxb.io/osquery-api-otx/bootstrap?flavor=pkg)"

Windows PowerShell

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; API_KEY=<api-key> (new-object Net.WebClient).DownloadString("https://api.agent.otxb.io/osquery-api-otx/bootstrap?flavor=powershell") | iex; install_agent -apikey <api-key> [-target <target>]

Debian APT

API_KEY=<api-key> [TARGET=<target>] bash -c "$(curl -s https://api.agent.otxb.io/osquery-api-otx/bootstrap?flavor=apt)"

Redhat RPM

API_KEY=<api-key> [TARGET=<target>] bash -c "$(curl -s https://api.agent.otxb.io/osquery-api-otx/bootstrap?flavor=rpm)"

项目结构

aliensec-mcp-server/
├── src/
│   ├── config/
│   │   └── index.ts           # Environment configuration & validation
│   ├── core/
│   │   ├── alienVault.ts      # AlienVault OTX API client
│   │   └── virusTotal.ts      # VirusTotal API client
│   ├── database/
│   │   └── index.ts           # SQLite database with repositories
│   ├── types/
│   │   └── index.ts           # TypeScript type definitions
│   └── index.ts               # Main MCP server entry point
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
├── eslint.config.js
├── .prettierrc
└── README.md

架构

分层设计

┌─────────────────────────────────────┐
│           MCP Server Layer           │  ← src/index.ts
├─────────────────────────────────────┤
│         Core Service Layer           │  ← src/core/
├─────────────────────────────────────┤
│         Data Access Layer            │  ← src/database/
├─────────────────────────────────────┤
│        Configuration Layer           │  ← src/config/
├─────────────────────────────────────┤
│           Type Definitions           │  ← src/types/
└─────────────────────────────────────┘

关键设计模式

  1. 单例模式:数据库、AlienVault 客户端、VirusTotal 客户端

  2. 仓储模式:ScanRepository、CircuitBreakerRepository、APILogRepository

  3. 熔断器模式:失败时自动轮换 API 密钥

  4. 令牌桶限流器:VirusTotal API 的速率限制

  5. 工厂模式:通过依赖注入创建 MCP 服务器

  6. 策略模式:不同扫描风格共享统一接口


数据库模式

服务器使用 SQLite,包含以下表:

scan_records

存储所有扫描结果,包括发现项、VirusTotal 数据和时间戳。

circuit_breaker_events

跟踪 API 密钥的熔断器状态变化。

api_logs

记录所有 API 请求,包括响应时间、状态码和错误。

schema_version

跟踪数据库模式版本以支持迁移。


错误处理

自定义错误类

  • AlienSecError:带代码和 statusCode 的基础错误类

  • AlienVaultAPIError:AlienVault 特定错误

  • VirusTotalAPIError:VirusTotal 特定错误,带速率限制检测

  • DatabaseError:数据库相关错误

  • ConfigurationError:配置验证错误

错误响应格式

工具错误返回标准 MCP 结果形状,其中 isError: true。人类可读消息是第一个内容块;error 携带触发失败的上下文的 JSON 字符串化数据(扫描 ID、风格、目标等):

{
  "content": [
    { "type": "text", "text": "Scan failed: <error message>" }
  ],
  "isError": true,
  "error": "{\n  \"scanId\": \"...\",\n  \"flavor\": \"pkg\",\n  \"target\": \"...\",\n  \"error\": \"<error message>\"\n}"
}

日志记录

服务器使用 Pino 进行结构化日志记录,包含以下级别:

  • error:严重故障

  • warn:警告和潜在问题

  • info:正常操作和状态更新

  • debug:详细调试信息

  • trace:用于开发的高度详细日志

日志会自动脱敏,防止敏感数据(API 密钥)被记录。


速率限制与熔断器

VirusTotal 速率限制

  • 令牌桶算法:平滑速率限制

  • 可配置限制:通过环境变量设置

  • 自动等待:遇到速率限制时可选择等待

  • 熔断器:自动阻止反复失败的 API 密钥

熔断器配置

  • 失败阈值:连续 5 次失败

  • 重置超时:300 秒(5 分钟)

  • 半开状态:完全重新打开前用 1 个请求进行测试

服务条款合规

本实现遵守 VirusTotal 的服务条款:

  • 多个 API 密钥用于冗余,而非绕过限制

  • 每个 API 密钥遵守各自的速率限制

  • 熔断器防止失败时快速重试

  • 每日请求计数防止配额耗尽


开发

运行测试

# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Run with coverage
npx vitest run --coverage

代码检查与格式化

# Run linting
npm run lint

# Auto-fix linting issues
npm run lint:fix

# Format code
npm run format

类型检查

npm run typecheck

构建验证

# Clean build
npm run clean
npm run build

# Check build output
ls -la dist/

环境变量

变量

必填

默认值

描述

ALIENVAULT_API_KEY

是

-

AlienVault OTX API 密钥

ALIENVAULT_BASE_URL

否

https://api.agent.otxb.io

AlienVault API 基础 URL

ALIENVAULT_DEFAULT_REGION

否

us-east-1

代理的默认区域

VIRUSTOTAL_API_KEYS

否

``

逗号分隔的 VirusTotal API 密钥

VIRUSTOTAL_BASE_URL

否

https://www.virustotal.com/api/v3

VirusTotal API 基础 URL

VIRUSTOTAL_RATE_LIMIT_PER_MINUTE

否

4

每分钟速率限制

VIRUSTOTAL_DAILY_LIMIT

否

500

每日请求限制

VIRUSTOTAL_CIRCUIT_BREAKER_TIMEOUT

否

300

熔断器超时时间(秒)

DATABASE_PATH

否

./data/aliensec.db

SQLite 数据库路径

DATABASE_ENCRYPTION_KEY

否

-

数据库加密密钥

DATABASE_TIMEOUT

否

5000

数据库连接超时时间

NAME

否

aliensec-mcp-server

服务器名称

VERSION

否

1.0.0

服务器版本

DEBUG

否

false

启用调试模式

LOG_LEVEL

否

info

日志级别(error、warn、info、debug、trace)


安全注意事项

数据保护

  1. 数据库加密:使用 DATABASE_ENCRYPTION_KEY 对静态敏感数据进行加密

  2. API 密钥安全:API 密钥永远不会被记录到日志中;请使用环境变量或安全保管库

  3. 内存安全:敏感字符串在存储到熔断器和 API 日志表之前,会使用 PBKDF2(120,000 次迭代)进行哈希处理

网络安全

  1. 仅使用 HTTPS:所有 API 通信均使用 HTTPS

  2. 证书验证:默认启用 TLS 证书验证

  3. User-Agent:自定义用户代理标识服务器版本

速率限制

  1. 客户端速率限制:防止压垮外部 API

  2. 熔断器:防止级联故障

  3. 背压:速率受限时自动等待


性能

优化

  • 连接池:数据库连接被复用

  • 懒加载:仓库按需创建

  • 索引查询:数据库表具有适当的索引

  • 缓存:API 密钥哈希被缓存以供熔断器检查使用

  • 异步/等待:非阻塞 I/O 操作

基准测试

  • 扫描请求:约 100-500 毫秒(模拟)

  • VirusTotal 请求:约 200-1000 毫秒(取决于网络)

  • 数据库操作:<10 毫秒(本地 SQLite)


故障排除

常见问题

数据库连接失败

Error: Failed to connect to database

解决方案:确保数据目录存在并具有写入权限:

mkdir -p data
chmod 755 data

缺少 ALIENVAULT_API_KEY

Missing required environment variables:
  - ALIENVAULT_API_KEY

解决方案:设置环境变量:

export ALIENVAULT_API_KEY=your_api_key_here
# or add to .env file

超出 VirusTotal 速率限制

Error: Rate limit exceeded for API key 0

解决方案:

  • 等待速率限制重置(默认:每分钟 4 个请求)

  • 添加更多 API 密钥(在 VIRUSTOTAL_API_KEYS 中以逗号分隔)

  • 使用 wait: true 参数自动等待

熔断器已打开

Error: API key 0 is blocked by circuit breaker

解决方案:等待熔断器超时时间到期(默认:5 分钟)。超时后熔断器将自动重新闭合。

调试模式

启用调试日志以进行详细的故障排除:

DEBUG=true LOG_LEVEL=debug npm run dev

贡献指南

拉取请求

  1. 复刻(Fork)该仓库

  2. 创建功能分支(git checkout -b feature/amazing-feature)

  3. 提交您的更改(git commit -m 'Add amazing feature')

  4. 推送到分支(git push origin feature/amazing-feature)

  5. 打开一个拉取请求

提交消息规范

  • 使用 Conventional Commits 格式

  • 使用类型前缀:feat:、fix:、docs:、style:、refactor:、test:、chore:

  • 主题行保持在 72 个字符以内

  • 如有需要,在正文中提供详细描述

代码审查

  • 所有 PR 需要至少一位维护者的批准

  • CI/CD 流水线必须通过(lint、类型检查、测试)

  • 代码必须遵循现有模式和风格


许可证

本项目采用 MIT 许可证 授权 - 详情请参阅 LICENSE 文件。


致谢


参考


Related MCP Connectors

Related MCP Servers

  • A
    license
    D
    quality
    D
    maintenance
    Enables AI assistants to access real-time threat intelligence, malware sample metadata, and security analysis tools via integration with MalwareBazaar, VirusTotal, and Telegram.
    29
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time threat intelligence for AI agents, enabling checks on IPs, domains, URLs, hashes, CVEs, prompt-injection payloads, and malicious AI-skill/MCP-tool definitions against a free database of 890K+ IOCs.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to access VirusTotal intelligence through MCP, supporting file, URL, domain, and IP lookups, plus analysis, via remote HTTP or local stdio.
    8
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Gives AI agents threat-intelligence verdicts for IPs, domains, URLs and hashes, CVE lookups with EPSS and CISA KEV data, and a prompt-injection gate that scans untrusted text before the agent acts on it. Agents can also batch-check up to 100 indicators, hunt brand-lookalike domains, and track scan and request quotas.
    1
    208 npm
    1
    MIT