F6 Threat Intelligence MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@F6 Threat Intelligence MCP Server Search all threat intelligence collections for 8.8.8.8 and summarize what you find."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
F6 Threat Intelligence MCP Server
MCP-сервер к API F6 Threat Intelligence. Даёт ИИ-ассистенту доступ к коллекциям TI: утечки, вредоносное ПО, атаки, подозрительные IP, угрозы и профили группировок — поиском по индикаторам и выборкой с фильтрами.
Тулы
Тул | Назначение |
| Коллекции, доступные учётной записи; заодно проверка ключа и IP |
| В каких коллекциях встречается индикатор и сколько записей в каждой |
| Выборка и поиск по коллекции, постранично |
| Изменения в коллекции с заданной точки последовательности |
| Стартовые точки для |
| Одна запись по id |
| WHOIS-обогащение по IP или домену |
| Справочник коллекций: поля, лимиты, методы; без запроса к API |
| Любой документированный read-only эндпоинт под |
Все тулы только читают. 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 и
доступ к коллекциям в порядке.
Переменные окружения
Переменная | По умолчанию | Назначение |
| — | логин (email) в веб-портале TI |
| — | персональный API-ключ |
|
| адрес портала; только |
| — | PEM-бандл УЦ для проверки сертификата портала, например внутреннего УЦ прокси; заменяет системные УЦ, поэтому в нём должны быть все нужные |
| — | прокси |
|
| таймаут запроса, секунд |
|
| повторов при 429/500/502/503/504, с учётом |
|
| минимальный интервал между запросами к одной коллекции, секунд |
|
| сколько секунд сервер помнит открытую выборку |
Примеры запросов
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.
Лицензия
Available Tools
9 toolsti_describe_collectionsARead-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_collectionARead-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_itemARead-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_listARead-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_updatesARead-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_global_searchARead-onlyIdempotent
Global search across every collection: GET /api/v2/search?q=... Answers which collections hold the indicator and how many records each has (apiPath, label, link, count). Start here when you have an indicator but not a collection, then pull the detail with ti_get_collection using the same query. Accepts free text ("8.8.8.8") or attribute:value ("email:example@gmail.com"). An entry with error was NOT searched (the collection failed or is not granted), which is not the same as no match. If this tool itself fails, search the likely collections one by one with ti_get_collection instead.
Inputs: query (required).
ti_graph_lookupARead-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_collectionsARead-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_requestARead-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
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Deltabridge brings an AI-native cyber threat intelligence platform into your AI agent. Search a knowledge graph of 200,000+ threat actors, malware families, vulnerabilities, indicators and campaigns, mapped to MITRE ATT&CK. Look up and enrich IOCs, trace links between entities and read living briefs built from 300+ open sources. Read-only, scoped to your organisation, with OAuth sign-in or an API key. Included on Researcher, Business and Enterprise plans.
Enrich, search, assess, and manage threat intelligence through 80+ typed MCP tools.
Live threat intel for agents: incidents, actors, CVEs with KEV/EPSS, ransomware leak-site victims.
Enrich and search people and companies, resolve identities, and enrich IP addresses.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables 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.-
- FlicenseBqualityDmaintenanceEnables 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.364-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to query and manage OpenCTI threat intelligence data, including indicators, observables, reports, malware, and more, with read-only and optional write operations.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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 npm2MIT