F6 ASM MCP Server
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 отклоняет ещё до отправки запроса.
Быстрый старт
Понадобятся 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=alertSeverityCrit/Error/Warning/Low=alertBody.statusCritical/High/Medium/Low severity. - Тест CVE называется
CVE vulnurability(именно так, с опечаткой).
Безопасность
Всё, что возвращают тулы, попадает в контекст языковой модели: периметр
компании, уязвимости, а через issues/leaks ещё и утёкшие учётные данные.
Выбирайте провайдера модели с учётом этого. Выдавайте серверу токен с доступом
только к нужным компаниям.
Токен отправляется только на адрес из ASM_BASE_URL и только по https://.
Редиректы не выполняются. Ответ больше 1 МБ не передаётся модели.
Модель угроз описана в SECURITY.md.
Участие в разработке
См. CONTRIBUTING.md.
Лицензия
Metadata
Release files for asm-mcp 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| asm_mcp-1.0.0.tar.gz | 83.0 kB | With provenance | Details for asm_mcp-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| asm_mcp-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for asm_mcp-1.0.0-py3-none-any.whl |
Total release size: 124.3 kB
Release files / asm_mcp-1.0.0.tar.gz
| Download URL | asm_mcp-1.0.0.tar.gz |
|---|---|
| Size | 83.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e6528bb95c65dc5c35c8c44742e54b7b49ae65913211e48d7a959c80ffd2c491
|
|
BLAKE2b-256 checksum How to use checksums |
0d28fc27b465cced4bb69c16017742387719662b1de9546aecf2d9ed1320c804
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logRelease files / asm_mcp-1.0.0-py3-none-any.whl
| Download URL | asm_mcp-1.0.0-py3-none-any.whl |
|---|---|
| Size | 41.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
debbe3460ac72c24f988ad449e2e998688a70d8890cbf9fe732ff2c8eeb82a11
|
|
BLAKE2b-256 checksum How to use checksums |
c847e12dacc47e68a4153662ea7bac69992e068a5861b3a3910a3cd4f22e758d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logSecurity for asm-mcp 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for asm_mcp-1.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.