World Intel MCP — 139 инструментов для разведки мира по открытым данным
📂 Исходный код на GitHubMCP-сервер с 139 инструментами для сбора разведданных в реальном времени из бесплатных открытых API: рынки, отчёты SEC, конфликты, военные, потоки беженцев, киберугрозы, климат, новости и ещё 30+ областей. Есть дашборд, CLI и векторное хранилище Qdrant. Лицензия MIT, платные API-ключи не нужны.
Кодинг-агент живёт в изолированной среде: он читает репозиторий, запускает тесты и пишет код. Обычно у него нет ответа на вопрос «что сейчас происходит в мире» — а иногда этот вопрос важнее, чем все тесты вместе. 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.