Skip to main content
Glama
F6 Threat Intelligence MCP Server

F6 Threat Intelligence MCP Server

Official
by F6-Security

F6 Threat Intelligence MCP Server

PyPI Python License CI

MCP-сервер к API F6 Threat Intelligence. Даёт ИИ-ассистенту доступ к коллекциям TI: утечки, вредоносное ПО, атаки, подозрительные IP, угрозы и профили группировок — поиском по индикаторам и выборкой с фильтрами.

Тулы

Тул

Назначение

ti_list_collections

Коллекции, доступные учётной записи; заодно проверка ключа и IP

ti_global_search

В каких коллекциях встречается индикатор и сколько записей в каждой

ti_get_collection

Выборка и поиск по коллекции, постранично

ti_get_updates

Изменения в коллекции с заданной точки последовательности

ti_get_sequence_list

Стартовые точки для ti_get_updates, в том числе на дату

ti_get_item

Одна запись по id

ti_graph_lookup

WHOIS-обогащение по IP или домену

ti_describe_collections

Справочник коллекций: поля, лимиты, методы; без запроса к API

ti_request

Любой документированный read-only эндпоинт под /api/v2

Все тулы только читают. ti_request не пропускает пути, которые меняют данные на стороне TI, и не отдаёт бинарные файлы.

Related MCP server: Google Threat Intelligence MCP Server

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

Нужен Python 3.10+, логин веб-портала TI и персональный API-ключ (Личный кабинет → Безопасность и доступ → Персональный токен). Адрес, с которого работает сервер, должен быть в списке доверенных IP учётной записи.

{
  "mcpServers": {
    "ti": {
      "command": "uvx",
      "args": ["ti-mcp"],
      "env": {
        "TI_LOGIN": "user@example.com",
        "TI_API_KEY": "<key>"
      }
    }
  }
}

Этот блок подходит для Claude Desktop и Cursor. Для VS Code — файл .vscode/mcp.json:

{
  "servers": {
    "ti": {
      "type": "stdio",
      "command": "uvx",
      "args": ["ti-mcp"],
      "env": {
        "TI_LOGIN": "user@example.com",
        "TI_API_KEY": "<key>"
      }
    }
  }
}

Для Claude Code:

claude mcp add ti \
  -e TI_LOGIN=user@example.com -e TI_API_KEY=<key> \
  -- uvx ti-mcp

Для OpenCode — ключ mcp в ~/.config/opencode/opencode.json (все проекты) или в opencode.json в корне проекта:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ti": {
      "type": "local",
      "command": ["uvx", "ti-mcp"],
      "enabled": true,
      "timeout": 660000,
      "environment": {
        "TI_LOGIN": "user@example.com",
        "TI_API_KEY": "{file:~/.config/ti-mcp/key}"
      }
    }
  }
}

В отличие от конфигов выше, command — массив вместе с аргументами, переменные — в environment, а "type": "local" обязателен. Ключ можно не держать в конфиге: OpenCode подставляет содержимое файла ({file:…}) или переменную окружения ({env:TI_API_KEY}). timeout — в миллисекундах, по умолчанию 30 с на запрос, а один вызов тула может длиться дольше: на 429 и 5xx сервер повторяет запрос до TI_RETRIES раз (по умолчанию 3), каждая попытка ждёт портал до TI_TIMEOUT (120 с), а между попытками выдерживается пауза Retry-After. 660 с покрывают четыре попытки и паузы по минуте; если меняете TI_TIMEOUT или TI_RETRIES, пересчитайте. Проверить подключение — opencode mcp list.

Вместо uvx можно использовать pip install ti-mcp и команду ti-mcp, либо контейнер — docker run -i --rm -e TI_LOGIN -e TI_API_KEY ghcr.io/f6-security/ti-mcp (образ собран под linux/amd64 и linux/arm64).

Чтобы запустить сервер из исходников — например, проверить ещё не вышедшие в релиз изменения, — поставьте его в отдельное окружение из клона репозитория:

git clone https://github.com/F6-Security/ti-mcp.git
cd ti-mcp
python3 -m venv venv
./venv/bin/pip install --require-hashes -r requirements.lock
./venv/bin/pip install --no-deps -e .

На Windows вместо venv/bin/ — venv\Scripts\, в том числе в пути для клиента ниже.

Затем укажите клиенту команду из этого окружения вместо uvx ti-mcp:

claude mcp add ti \
  -e TI_LOGIN=user@example.com -e TI_API_KEY=<key> \
  -- /path/to/ti-mcp/venv/bin/ti-mcp

В JSON-конфиге — "command": "/path/to/ti-mcp/venv/bin/ti-mcp" без args, в OpenCode — "command": ["/path/to/ti-mcp/venv/bin/ti-mcp"]. Пакет установлен в editable-режиме, поэтому правки кода подхватываются при следующем запуске сервера. Для тестового стенда задайте его адрес в TI_BASE_URL.

Первым вызовом сделайте ti_list_collections: он подтверждает, что ключ, IP и доступ к коллекциям в порядке.

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

Переменная

По умолчанию

Назначение

TI_LOGIN

—

логин (email) в веб-портале TI

TI_API_KEY

—

персональный API-ключ

TI_BASE_URL

https://ti.f6.security

адрес портала; только https://

TI_CA_BUNDLE

—

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

TI_PROXY

—

прокси http://host:port; HTTP_PROXY и HTTPS_PROXY из окружения не читаются

TI_TIMEOUT

120

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

TI_RETRIES

3

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

TI_MIN_FEED_INTERVAL

1

минимальный интервал между запросами к одной коллекции, секунд

TI_RESULT_ID_TTL

150

сколько секунд сервер помнит открытую выборку scroll=true

Примеры запросов

ti_global_search        query="8.8.8.8"
ti_describe_collections collection="ioc/common"
ti_get_collection       collection="ioc/common" query="ip:8.8.8.8"
ti_get_collection       collection="osi/vulnerability" date_from="2026-10-01" extra_params={"has_exploit": 1}
ti_get_collection       collection="apt/threat" limit=10 offset=10
ti_get_updates          collection="malware/cnc" seq_update=16394859

Типичный путь: ti_global_search по индикатору показывает, в каких коллекциях он встречается; ti_describe_collections подсказывает поля и лимиты нужной; ti_get_collection с тем же запросом отдаёт записи.

Фильтр query — свободный текст по всем атрибутам ("8.8.8.8") или атрибут:значение ("domain:example.com"). Атрибуты — поля ответа коллекции, их показывает ti_describe_collections, но работают они не везде: отчёты об угрозах (apt/threat, hi/threat) ищутся только свободным текстом, кроме id: и domain:. Несколько слов без оператора ищутся как одна фраза — соединяйте их AND/OR. Правила поиска коллекции приходят заметкой в каждом ответе. Даты date_from/date_to — YYYY-MM-DD или YYYY-MM-DDTHH:MM:SSZ.

Карточки группировок (apt/threat_actor, hi/threat_actor) приходят из ti_get_collection без history — журнала изменений, который занимает большую часть карточки; полную запись отдаёт ti_get_item.

Страницы ti_get_collection листаются параметром offset с шагом limit до count. Для выгрузки большого набора или полного обхода коллекции передайте scroll=true: сервер сам продолжит выборку при следующем вызове. Для непрерывного отслеживания ленты используйте ti_get_updates с seqUpdate из предыдущего ответа, стартовую точку даёт ti_get_sequence_list.

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

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

Ключ уходит только на адрес из TI_BASE_URL и только по https://; ответ больше 1 МБ отклоняется, чтобы один вызов не заполнил контекст.

Модель угроз и порядок сообщения об уязвимостях — SECURITY.md.

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

См. CONTRIBUTING.md.

Лицензия

Apache License 2.0

Available Tools

9 tools
ti_describe_collectionsA
Read-onlyIdempotent

Reference data from the API guides, answered locally with no API call and no rate-limit cost: for each collection its category, availability (общая vs индивидуальная), TTL, Admiralty code, severity, max records per request, which iteration methods it supports, whether apply_hunting_rules applies, and its response fields — which are also the attributes usable as q=field:value. Call this before ti_get_collection to pick the right collection and filter.

Inputs: category, collection, include_fields.

ti_get_collectionA
Read-onlyIdempotent

Common API — read records from a collection: GET /api/v2/{collection}. This is both the browse and the search call: add query to filter, df/dt to bound by date. The response carries count and items; records come back newest-first. Default paging is by offset: the first call returns the newest page, the next one passes offset += limit, until offset reaches count. The backend caps offset + limit at 10000, which is plenty for answering questions. Set scroll=true only to export a result set beyond 10000 records or to walk a whole collection: the response then carries resultId, which this tool remembers per collection+filter and passes back automatically on the next call (stop when items is empty; an id stays valid ~150 s after its last use, and on some collections a NEW scroll is allowed only once per 60 s). Use ti_get_updates instead when tracking a feed continuously.

Inputs: collection (required), lang, limit, query, +8 more.

ti_get_itemA
Read-onlyIdempotent

Fetch one record by id: GET /api/v2/{collection}/{id}. Ids come from ti_get_collection or ti_get_updates results. Not every collection supports it — a 404 here does not mean the record is gone, only that this collection has no by-id endpoint.

Inputs: id (required), collection (required).

ti_get_sequence_listA
Read-onlyIdempotent

GET /api/v2/sequence_list — the current seqUpdate of every collection, i.e. the starting points for ti_get_updates. Pass date to get the seqUpdate each collection stood at on that date, which is how you backfill from a chosen day rather than from the beginning of the feed.

Inputs: date, collection, apply_hunting_rules.

ti_get_updatesA
Read-onlyIdempotent

Updated API — poll a collection for records changed since a point in the update sequence: GET /api/v2/{collection}/updated. Start with a seq_update from ti_get_sequence_list (or omit it, optionally bounding with date_from), then feed the seqUpdate value from each response into the next call. Records come back oldest-first; stop when items is empty. Every record in TI has a unique seqUpdate and a record that gets updated is renumbered, so it resurfaces. Not available for compromised/breached, compromised/reaper — use ti_get_collection for those.

Inputs: collection (required), lang, limit, query, +5 more.

ti_graph_lookupA
Read-onlyIdempotent

WHOIS/graph enrichment for one IP or domain: GET /api/v2/utils/graph/ip?ip=... or GET /api/v2/utils/graph/domain?domain=... Complements the collections — it describes the object itself rather than the threat records mentioning it.

Inputs: kind (required), value (required).

ti_list_collectionsA
Read-onlyIdempotent

List the collections this account may read: GET /api/v2/user/granted_collections. Each entry carries collection, label, route (NO_ROUTE means no data) and huntingRulesUsed. This is the guide's own configuration self-test — call it first to confirm credentials, IP allow-listing and access all work.

Inputs: no named parameters.

ti_requestA
Read-onlyIdempotent

Escape hatch for a documented read-only TI endpoint this server does not model: performs GET /api/v2/{path} with the given query parameters and returns the raw JSON. Example: path "malware/malware/network/", or path "ioc/common/updated" with {"limit": 5000}. Rate limiting still applies. The path must start with a collection section or one of search, sequence_list, user, utils. Refused: action segments ({collection}/{id}/action/{action} — the API performs those on GET, and this tool is read-only) and file segments (binary files, not JSON).

Inputs: path (required), params.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 9 tools

    Disambiguation4/5

    Each tool targets a distinct step in the TI workflow: discovery (ti_list_collections, ti_describe_collections), indicator search (ti_global_search), record retrieval (ti_get_collection, ti_get_item), incremental polling (ti_get_updates, ti_get_sequence_list), and enrichment (ti_graph_lookup). The main residual overlap is ti_get_collection, which is both browse and search, and ti_request, which can reach any endpoint the others model — though both descriptions explicitly state when not to use them.

    Naming Consistency4/5

    All tools share a ti_ namespace and use verb_noun or verb_object forms (ti_get_collection, ti_list_collections, ti_describe_collections, ti_global_search). Minor deviations exist: ti_graph_lookup orders noun before verb, and ti_request/ti_get_item are terse, but the pattern remains readable and predictable.

    Tool Count5/5

    Nine tools is well within the ideal 3-15 range and each maps to a concrete, non-redundant capability (auth check, schema introspection, search, browse, by-id, incremental sync, sequence bookkeeping, enrichment, escape hatch). No tool feels like filler.

    Completeness4/5

    The read-only surface is covered end to end: credential/access check, collection metadata, cross-collection search, filtered reads, by-id fetch, incremental updates with sequence tracking, and graph enrichment, with ti_request as a catch-all for unmodeled documented endpoints. Remaining gaps are minor (e.g. no first-class user/account or saved-query tool), but ti_request can reach those.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables access to StealthMole's threat intelligence API for searching and monitoring threats across Deep & Dark Web, Telegram channels, leaked credentials, and ransomware incidents. Provides comprehensive cybersecurity intelligence through natural language queries.
      -
    • F
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to access Google's Threat Intelligence suite for file analysis, indicator of compromise searches, and reputation checking. It supports both local and cloud-based deployments for investigating campaigns, threat actors, and malware families.
      36
      4
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI assistants to query and manage OpenCTI threat intelligence data, including indicators, observables, reports, malware, and more, with read-only and optional write operations.
      1
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI assistants to query the DugganUSA threat-intel corpus (1.5M+ IOCs) via three read-only tools: search, enrich-ioc, and stix-feed-summary.
      64 npm
      2
      MIT