World Intel MCP — 139 инструментов для разведки мира по открытым данным

· 8 мин чтения
mcp mcp-server python osint real-time
📂 Исходный код на GitHub

MCP-сервер с 139 инструментами для сбора разведданных в реальном времени из бесплатных открытых API: рынки, отчёты SEC, конфликты, военные, потоки беженцев, киберугрозы, климат, новости и ещё 30+ областей. Есть дашборд, CLI и векторное хранилище Qdrant. Лицензия MIT, платные API-ключи не нужны.

World Intel MCP — 139 инструментов для разведки мира по открытым данным

Кодинг-агент живёт в изолированной среде: он читает репозиторий, запускает тесты и пишет код. Обычно у него нет ответа на вопрос «что сейчас происходит в мире» — а иногда этот вопрос важнее, чем все тесты вместе. World Intel MCP закрывает этот пробел. Это MCP-сервер на Python, который превращает 139 инструментов сбора данных в инструменты для агента: котировки, сводки SEC, зоны конфликтов, военная авиация, потоки беженцев, киберугрозы, погода, космическая погода, запуски ракет. Всё это доступно по обычному протоколу MCP, то есть подключается к Claude Code, Cursor и другим клиентам одной строкой конфигурации.

Ключевая особенность проекта — ни одного платного API. Все источники либо полностью открытые, либо работают с бесплатным тарифом без ключа. Автор называет такую сборку разведданных OSINT — открытые источники, которые не требуют доступа с привилегиями.

Установка и запуск

Нужен Python 3.11 или новее.

git clone https://github.com/marc-shade/world-intel-mcp.git
cd world-intel-mcp
pip install -e .

# Необязательные дополнения
pip install -e ".[dashboard]"  # дашборд операционного центра
pip install -e ".[vector]"     # векторное хранилище Qdrant + FastEmbed
pip install -e ".[dev]"        # pytest, respx, coverage

После установки доступны четыре точки входа:

world-intel-mcp                # сервер MCP в режиме stdio
intel-dashboard                # веб-дашборд на http://localhost:8501
intel markets                  # индексы акций прямо в терминале
intel earthquakes --min-mag 5.0

Отчёты можно собирать в PDF или HTML:

pip install -e ".[pdf]"        # для PDF нужен brew install pango на macOS
intel report --format html
intel report -s markets,cyber,earthquakes

Подключение к Claude Code

Всё, что нужно, — одна запись в ~/.claude.json:

{
  "mcpServers": {
    "world-intel-mcp": {
      "command": "world-intel-mcp"
    }
  }
}

После перезапуска агент получает 139 новых инструментов и сам решает, когда их звать. Это важное отличие от обычного скрипта: не нужно вручную проговаривать «сначала проверь котировки, потом отчёт SEC». Модель видит описания инструментов и обращается к ним по смыслу задачи.

Какие данные доступны

Всего проект покрывает больше 30 областей, сгруппированных так:

Область Примеры инструментов
Рынки и макросы intel_market_quotes, intel_yield_curve, intel_macro_composite, intel_macro_signals
Отчёты и компании intel_sec_filings, intel_company_filings, intel_recent_8k, intel_company_profile
Экономика intel_fred_series, intel_gas_prices, intel_central_bank_rates, intel_world_bank_indicators
Конфликты intel_acled_events, intel_ucdp_events, intel_unrest_events, intel_humanitarian_summary
Военные и авиация intel_military_flights, intel_theater_posture, intel_military_surge, intel_aircraft_batch
Миграция intel_displacement_summary, intel_migration_flows, intel_migration_surges, intel_migration_history
Инфраструктура intel_internet_outages, intel_cable_health, intel_service_status, intel_bgp_status
Природа и погода intel_earthquakes, intel_wildfires, intel_cyclones, intel_volcano_activity
Кибербезопасность intel_cyber_threats (URLhaus, CISA KEV, SANS)
Аналитика и NLP intel_signal_convergence, intel_instability_index, intel_extract_entities, intel_keyword_spikes
Отчёты и дайджесты intel_generate_report, intel_daily_digest, intel_situation_brief

Названия инструментов отдают предпочтение префиксу intel_, чтобы их легко было отличить от остальных в списке MCP-клиента.

Отдельный интерес представляет семейство intel_jet_*. Эти три инструмента следят за группой самолётов — бизнес-джетов по кодам типа ICAO или военных — и сравнивают их активность с обычным расписанием: сколько бортов в воздухе в конкретный получасовой срез по UTC в сравнении с тем же слотом в прошлые дни той же недели. Если число заметно выше базовой линии, система выдаёт предупреждение от 1 до 5 и пытается определить, откуда самолёты прилетели. Автор честно предупреждает о границах метода: базовая линия собирается по нескольким слотам в день, а не за год, поэтому обученных праздничных профилей у системы нет. Именно этот подход вдохновил проект kylemcdonald/ews, но здесь это независимая реализация над другим открытым источником данных.

Свои зоны: геозоны AOI

Самый практичный сценарий для разработчика — следить за своим городом, регионом или объектом. Десять инструментов intel_aoi_* позволяют назвать интересующую область и получать по ней сводку со ссылками на источники. Формат области выбирается под задачу:

intel_aoi_define(name="Pittsburgh", lat=40.4406, lon=-79.9959, radius_km=50)
intel_aoi_define_polygon(name="Taiwan Strait", vertices=[[22.5, 118.0], [22.5, 121.5], [26.5, 122.0], [26.5, 118.5]])
intel_aoi_define_corridor(name="Suez Approach", waypoints=[[29.9, 32.55], [27.5, 34.0], [24.0, 36.0]], width_km=80)
intel_aoi_brief(name="Taiwan Strait")
intel_aoi_changes(name="Suez Approach")
intel_aoi_digest()

Круг подходит для города, многоугольник — для приграничной зоны или пролива, коридор — для судоходного пути. Инструмент intel_aoi_brief собирает землетрясения, военные полёты, пожары, события конфликтов, авиацию и близкую инфраструктуру в радиусе области. Каждый пункт ответа сопровождается ссылкой [n] на нумерованный список источников.

Отдельная деталь, которая многое объясняет: в ответе есть поле data_gaps. Если домен не удалось отфильтровать по области — например, данные NASA FIRMS не покрывают этот регион, — сервер прямо называет проблему, а не молча пропускает раздел.

Инструмент intel_aoi_changes — это механизм оповещений. Первый вызов записывает начальное состояние, последующие показывают, что вшло в зону и что из неё вышло. Неудачные запросы попадают в data_gaps и не считаются выходом из зоны. Те же операции доступны из терминала: intel aoi define|define-polygon|define-corridor|list|update|delete|brief|escalation|changes. Хранятся области в той же базе SQLite, что и кэш, поэтому переживают перезапуск.

Дашборд и отчёты

intel-dashboard открывает операционную карту на Leaflet со слоями, которые включаются по мере надобности: землетрясения, военная авиация, конфликты, пожары, ядерные объекты, инфраструктура, ваши геозоны с числом объектов после последнего обхода, коридоры миграции по данным УВКБ ООН. Данные приходят по 47 каналам SSE, то есть страница обновляется сама без перезагрузки.

История в векторном хранилище

Фишка проекта — не разовый запрос, а накопление. Если поднять Qdrant и коллектор, сервер будет каждые пять минут обходить все 55 источников, сохранять свежие данные и складывать их в векторный индекс. После этого появляется смысловой поиск по всей собранной истории:

docker run -p 6333:6333 qdrant/qdrant
pip install -e ".[vector]"
intel-collector --daemon              # цикл каждые 5 минут
intel-collector --daemon --interval 120  # каждые 2 минуты

Эмбеддинги считает FastEmbed на модели BAAI/bge-small-en-v1.5, 384 измерения. Видеокарта не нужна, холодный старт занимает около трёх секунд.

После накопления истории агент может спрашивать обычным языком: «военная активность у Тайваньского пролива» найдёт военные полёты, морские предупреждения и данные о позах в театрах; «киберугрозы против медицины» — записи из URLhaus и CISA KEV; «признаки спада в экономике» — перевёрнутую кривую доходности и макро-сигналы.

Для постоянной работы на macOS в комплекте есть скрипт scripts/collector-daemon.sh: он подставляет путь к текущей копии репозитория в шаблон launchd и ставит коллектор как службу, которая переживает перезагрузку.

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

Большинство источников работают без ключей. Ключи нужны только там, где бесплатный тариф ограничен:

Переменная Что открывает
ACLED_ACCESS_TOKEN События вооружённых конфликтов ACLED
FRED_API_KEY Макроэкономические данные и кривая доходности
EIA_API_KEY Цены на энергоносители
NASA_FIRMS_API_KEY Спутниковые данные о пожарах
CLOUDFLARE_API_TOKEN Данные об обрывах интернета
OPENSKY_CLIENT_ID / OPENSKY_CLIENT_SECRET Резервный источник военных полётов
OLLAMA_API_URL / OLLAMA_MODEL Локальная модель для генерации сводок
WORLD_INTEL_AOI_WEBHOOK Адрес, куда отправляется POST при изменениях в геозонах

Последняя переменная особенно полезна: если в зону что-то вошло или вышло, коллектор отправляет запрос на ваш URL. Формат ответа можно переключить на сырой markdown через WORLD_INTEL_AOI_WEBHOOK_FORMAT=text — такие уведомления красиво отображаются в ntfy.

Как всё устроено внутри

server.py     (MCP stdio) ─┐                                               ┌─ VectorStore (Qdrant)
cli.py        (Click CLI)  ├─> sources/*.py ─> Fetcher ─> CircuitBreaker ─┤
dashboard.py  (SSE)        │    analysis/*.py                              └─ Cache (SQLite)
collector.py  (daemon)    ─┘

Четыре модуля делят ответственность. sources/*.py — тридцать с лишним модулей, каждый экспортирует функцию fetch_* и отвечает за один домен. Fetcher — асинхронный HTTP-клиент на httpx: он сам делает повторы, ограничивает частоту запросов к каждому источнику и при недоступности подставляет устаревшие данные из кэша. CircuitBreaker отслеживает сбои по каждому источнику отдельно: три неудачи подряд — и источник отключается на пять минут. Кэш лежит в SQLite в режиме WAL, у каждой записи есть срок жизни.

Аналитический слой analysis/*.py склеивает данные из разных доменов: агрегирует сигналы по странам, считает индекс нестабильности, извлекает сущности из новостей, собирает сводку по компании из котировок, отчётов SEC и активности на GitHub.

Статические наборы данных лежат в config/*.py: 70+ военных баз, 40 портов, 24 трубопровода, 24 ядерных объекта, 34 подводных кабеля, 48 дата-центров, 27 космодромов, 82 биржи. Автор прямо предупреждает: эти списки глобальные и намеренно неполные. Тихий ответ по геозоне означает, что в радиусе ничего не нашлось из курируемых наборов, а не то, что инфраструктуры в вашем районе нет.

Кому это пригодится

Проект не про финансовый трейдинг и не про разведку в военном смысле. Он полезен там, где агенту нужно быстро проверить гипотезу о внешнем мире: как санкции на компанию отразятся на её акциях, что происходит с цепочками поставок при блокировке пролива, есть ли рост числа беженцев из конкретной страны, не идёт ли аномальная активность самолётов над объектом.

Что важно понимать про данные: они публичные и бесплатные, а значит, шумные и неполные. Инструмент показывает ссылки на источник, чтобы вывод всегда можно было проверить. Перед использованием данных в решении — сверяйтесь с первоисточником. Подробности о каждом инструменте и обновления лежат в README и CHANGELOG, лицензия — MIT.

Источник: https://github.com/marc-shade/world-intel-mcp