Skip to main content
Glama
F6 ASM MCP Server

F6 ASM MCP Server

Official
by F6-Security

F6 ASM MCP Server

English

PyPI Python License CI

MCP-сервер для клиентского API F6 ASM (Attack Surface Management). Через него ИИ-ассистент получает доступ к внешнему периметру компании: активам (домены, IP, диапазоны, сертификаты, ПО) и найденным на них проблемам. Можно получать сами записи с фильтрами или сводные цифры.

Тулы

Тул

Назначение

asm_list_companies

Компании, доступные токену. Заодно проверяет адрес, токен и доступ

asm_get_assets

Активы компании с фильтрами, постранично по seqUpdate

asm_get_issues

Проблемы компании с фильтрами, постранично по seqUpdate

asm_get_issue_evidence

Доказательства по одной проблеме

asm_assets_summary

Сводка по всем активам: тип, статус, уровень проблем

asm_issues_summary

Сводка по проблемам: severity, статус, категория, тест, топ хостов и CVE

asm_describe

Справочник: типы, статусы, severity, поля, лимиты, особенности API. Работает без запроса к API

asm_request

Остальные эндпоинты, только из фиксированного списка read-only: отчёты, логи, карточка компании, скоринг, утечки

Все тулы только читают данные. Эндпоинты, которые что-то создают, меняют, удаляют или переводят статус, asm_request отклоняет ещё до отправки запроса.

Related MCP server: watchTowr Platform MCP Server

Быстрый старт

Понадобятся uv (или Python 3.10+ и pip), адрес вашей инсталляции ASM и API-токен. uvx asm-mcp скачивает пакет с PyPI и запускает его в отдельном окружении, ставить ничего заранее не нужно.

{
  "mcpServers": {
    "asm": {
      "command": "uvx",
      "args": ["asm-mcp"],
      "env": {
        "ASM_BASE_URL": "https://asm.example.com",
        "ASM_API_TOKEN": "<token>"
      }
    }
  }
}

Этот блок подходит для Claude Desktop и Cursor. Для VS Code используется файл .vscode/mcp.json: ключ servers и "type": "stdio", остальное так же.

Для Claude Code:

claude mcp add asm \
  -e ASM_BASE_URL=https://asm.example.com -e ASM_API_TOKEN=<token> \
  -- uvx asm-mcp

Вместо uvx можно поставить пакет командой pip install asm-mcp и указать клиенту команду asm-mcp.

Установка из исходников в отдельное окружение:

cd asm-mcp
python3 -m venv venv
./venv/bin/pip install --require-hashes -r requirements.lock
./venv/bin/pip install --no-deps -e .

После этого укажите клиенту "command": "/path/to/asm-mcp/venv/bin/asm-mcp" без args. На Windows путь будет venv\Scripts\asm-mcp.exe.

Можно запускать в контейнере:

docker build -t asm-mcp .
docker run -i --rm -e ASM_BASE_URL -e ASM_API_TOKEN asm-mcp

Первым вызовом сделайте asm_list_companies. Он показывает, что адрес, токен и доступ к компаниям в порядке.

Переменные окружения

Переменная

По умолчанию

Назначение

ASM_BASE_URL

—

Адрес инсталляции ASM, только https://. Суффикс /api/v2 можно указывать или нет

ASM_API_TOKEN

—

API-токен, передаётся как Authorization: Bearer

ASM_CA_BUNDLE

—

PEM-бандл УЦ для внутреннего сертификата. Заменяет системные УЦ, поэтому в нём должны быть все нужные

ASM_PROXY

—

Прокси http://host:port. Переменные HTTP_PROXY и HTTPS_PROXY не читаются

ASM_TIMEOUT

60

Таймаут одного запроса, секунд

ASM_RETRIES

3

Число повторов при 429/500/502/503/504 с учётом Retry-After

ASM_MIN_INTERVAL

1.05

Пауза между запросами, секунд. Сервер пропускает 1 запрос/с на токен, для платных клиентов 0.1 с

ASM_TOOL_BUDGET

40

Сколько секунд может длиться один вызов тула. Должно быть меньше таймаута MCP-клиента

ASM_SUMMARY_TTL

600

Сколько секунд переиспользуется готовая фоновая сводка

Выключить проверку TLS нельзя: такой настройки нет намеренно. Для внутреннего УЦ используйте ASM_CA_BUNDLE.

Примеры

asm_list_companies
asm_issues_summary  company_id="…"
asm_get_issues      company_id="…" severity=["crit"] status=["detected"] fields=["alertBody.asset","testName","alertBody.reason"]
asm_get_assets      company_id="…" type=["domain","ip"] status=["confirmed","new"]
asm_get_assets      company_id="…" seq_update="1700000000000_0a1b…"
asm_request         path="reports/<company_id>/last"
asm_request         method="POST" path="dashboard/scores" params={"companyId":"…","dateFrom":"2026-10-01"}

Периметр компании — это активы со статусом confirmed или new. Статус false означает, что актив исключён. Открытые проблемы — это статусы detected и under review.

Пагинация

asm_get_assets и asm_get_issues идут от старых записей к новым и сами перелистывают страницы. Один вызов останавливается в одном из трёх случаев: набрано max_items записей, истёк ASM_TOOL_BUDGET или ответ дошёл до 1 МБ. Тогда в ответе будет complete: false, причина в reason и курсор в seqUpdate. Курсор — это seqUpdate последней отданной записи, поэтому при продолжении записи не пропускаются. Если сохранить seqUpdate после полного обхода, следующий вызов с ним вернёт только изменения.

Сводки по большим компаниям

Компанию на 10 000+ активов при лимите 1 запрос/с за один вызов не обойти. Сводка считает, пока хватает ASM_TOOL_BUDGET, а затем передаёт посчитанное и курсор фоновой задаче в процессе сервера. Ответ приходит с complete: false и job_id. Повторный вызов с теми же аргументами возвращает прогресс, а после завершения полный результат. Задачи хранятся только в памяти, файлы не пишутся. Одновременно идут не больше двух задач.

Обход особенностей API

  • Фильтр status в /issues/updated пропускает записи с другими статусами. Статус и severity перепроверяются на клиенте, а число отброшенных записей возвращается в droppedByFilter.

  • Если задан фильтр и count маленький, API отвечает пустой страницей. Поэтому при фильтрах count не бывает меньше 100, а лишнее обрезается на клиенте.

  • Тяжёлые страницы доменов не успевают загрузиться. В этом случае страница запрашивается заново в половину размера, но не меньше 50.

  • Соответствие severity: crit/high/medium/low = alertSeverity Crit/Error/Warning/Low = alertBody.status Critical/High/Medium/Low severity.

  • Тест CVE называется CVE vulnurability (именно так, с опечаткой).

Безопасность

Всё, что возвращают тулы, попадает в контекст языковой модели: периметр компании, уязвимости, а через issues/leaks ещё и утёкшие учётные данные. Выбирайте провайдера модели с учётом этого. Выдавайте серверу токен с доступом только к нужным компаниям.

Токен отправляется только на адрес из ASM_BASE_URL и только по https://. Редиректы не выполняются. Ответ больше 1 МБ не передаётся модели.

Модель угроз описана в SECURITY.md.

Участие в разработке

См. CONTRIBUTING.md.

Лицензия

Apache License 2.0

Available Tools

8 tools
asm_assets_summaryA
Read-onlyIdempotent

Counts over every asset of a company, no records: by type, status and issue level (hasIssues), with assets that have issues per type. Default status: the perimeter (confirmed, new). A large company does not fit in one call: the answer then has complete=false and job_id, the rest is counted in the background, and calling again with the same arguments returns progress and then the full result (reused for ASM_SUMMARY_TTL seconds).

Inputs: company_id (required), type, status.

asm_describeA
Read-onlyIdempotent

Reference answered locally, no API call: asset types and statuses, issue statuses, the severity mapping, categories and test names, record fields, API limits and quirks, and the read-only routes asm_request may call.

Inputs: section.

asm_get_assetsA
Read-onlyIdempotent

Assets of a company: POST /api/v2/assets/updated, oldest-first, following the seqUpdate cursor across pages. Filters: type, status, asset, software, version. Returns items with complete, reason and seqUpdate; when complete is false, call again with seq_update to continue. One call stops at max_items, after ~40 s or at 1 MB of output. Without a status filter excluded assets (status 'false') are included — the perimeter is status ['confirmed', 'new']. For totals use asm_assets_summary.

Inputs: company_id (required), type, asset, fields, +7 more.

asm_get_issue_evidenceA
Read-onlyIdempotent

Evidence of one issue: GET /api/v2/issues/evidence/{issue_id} — what the scanner saw (response headers, banner, certificate, DNS records). issue_id is the alertHash from asm_get_issues.

Inputs: issue_id (required).

asm_get_issuesA
Read-onlyIdempotent

Issues (security findings) of a company: POST /api/v2/issues/updated, oldest-first, following the seqUpdate cursor. Filters: severity, status, category, test_name, asset, port, issue_hash, cve. Status and severity are re-checked locally because the server filter leaks. Returns items with complete, reason and seqUpdate; when complete is false, call again with seq_update. One call stops at max_items, after ~40 s or at 1 MB. For totals use asm_issues_summary; for proof of one issue asm_get_issue_evidence.

Inputs: company_id (required), cve, port, asset, +11 more.

asm_issues_summaryA
Read-onlyIdempotent

Counts over the issues of a company, no records: by severity, status, asset type, category, test name, top assets and top CVEs. Default status: open (detected, under review). Same background mechanism as asm_assets_summary for large companies.

Inputs: company_id (required), asset, status, severity.

asm_list_companiesA
Read-onlyIdempotent

Companies this token may read: GET /api/v2/companies. Each entry has id (the company_id of every other tool), name, website, score, footprint (number of domains and IPs) and the recent score history. Call it first: it confirms ASM_BASE_URL, the token and access.

Inputs: no named parameters.

asm_requestA
Read-onlyIdempotent

Read-only endpoints without a tool of their own: reports (reports/{company_id}, reports/{company_id}/last, reports/{report_id}/report), company card and perimeter settings (companies/{company_id}, assets/{company_id}), logs (companies/logs, users/logs), clients, partners, POST dashboard/scores and POST issues/leaks. Anything else — every endpoint that creates, updates, removes or changes status — is refused before a request is made. asm_describe section=requests lists each route with its params.

Inputs: path (required), method, params.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 8 tools

    Disambiguation4/5

    The get_* vs *_summary split is explicitly documented (records vs counts), and evidence is clearly tied to an issue_id, so most tools are distinct. The only soft spot is asm_request, a read-only catch-all that could in principle cover ground adjacent to the dedicated tools, though the descriptions steer agents to prefer specific tools first.

    Naming Consistency4/5

    All names share the asm_ prefix and mostly follow verb_noun (list_companies, get_assets, get_issues, get_issue_evidence), with describe/request as reasonable utilities. asm_assets_summary and asm_issues_summary drop the verb and use noun_summary, a minor deviation but still predictable.

    Tool Count5/5

    Eight tools is well-scoped for a read-only ASM API: one entry point, two paginated record readers, two aggregation tools, one evidence lookup, one local reference, and one escape hatch. Each earns its place with no redundant padding.

    Completeness4/5

    The read-only surface covers companies, assets, issues, evidence, and aggregate counts, with asm_request filling in reports, logs, clients, and settings. Minor gaps remain (no single-asset lookup or dedicated report/log tools), but agents can work around them through asm_request and asm_describe.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Gives AI assistants access to the Exploit Intelligence Platform for vulnerability and exploit intelligence. Supports searching CVEs, exploits, and generating pentest findings.
      17
      53 PyPI
      1
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Connects AI assistants to the watchTowr Platform for real-time access to external attack surface data, findings, and threat intelligence. Provides 113 tools for querying and managing assets, findings, hunts, and more.
      1
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to search internet-connected devices, perform IP and host reconnaissance with port, banner and TLS data, run DNS lookups, and retrieve CVE/CPE vulnerability intelligence including CVSS, EPSS and KEV status. It supports credit-aware queries with both stdio and HTTP streaming transports for clients like Claude Code, Codex, Gemini CLI and Claude Desktop.
      -
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to perform internet-facing reconnaissance and vulnerability research by looking up open ports, banners and TLS details for IPs, searching devices with Shodan query syntax, resolving DNS records in batch, and retrieving CVE/CPE intelligence with CVSS, EPSS and KEV status. Tools are read-only, credit-aware, and exposed over stdio or HTTP streaming.
      MIT