Gdelt Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.8.1更新於 Nov 1, 2026

Search and analyze global news coverage and US TV transcripts via the GDELT Project APIs.

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取資料與分析媒體與設計

概覽

AI 產生的概覽

檢索並分析 GDELT 的全球新聞報導與美國電視新聞逐字稿,不需 API 金鑰。

可以做什麼
  • 以完整的 GDELT 查詢語法、篩選條件與排序檢索近期全球新聞文章,每次最多 250 篇
  • 依時間追蹤報導量、原始計數或平均語調,並依語言或國家比較報導分布
  • 取得語調直方圖,並查詢 GKG 主題識別碼以用於 theme 篩選
  • 檢索電視新聞字幕,對電視台與節目排名,取得符合的片段與逐字稿摘錄,並擷取共現詞彙
  • 列出電視台及其市場、電視網與監測日期範圍
適用情境
適合媒體監測、研究與事實查核:需要近期全球新聞報導或美國電視歷史報導時,可追蹤某議題何時出現報導高峰、語調如何變化、哪些國家或電視台帶動報導,以及電視上以哪些詞彙描述該議題。
執行需求
可使用公開託管的 Streamable HTTP 端點(免安裝),或透過 npx/bunx 或 Docker 在本機執行;需要 Bun v1.4.0 以上或 Node.js v24 以上。GDELT 是免費公開 API,不需金鑰。需要能連線至 GDELT 的網路。選用設定包括 GDELT_BASE_URL、請求間隔與逾時,以及供本機 SQLite GKG 鏡像使用的 GDELT_MIRROR_PATH(Node 環境需 better-sqlite3,並需一次性建置鏡像)。
安裝前請注意
工具僅做查詢,但請求被限制為每五秒一次,且 DOC 僅涵蓋最近三個月,結果可能較慢或不完整;DOC 回傳空結果可能只是 GDELT 過載。回應可能來自快取或過期資料,並會在回應中標示。選用的 GKG 鏡像需下載數 GB 資料並佔用磁碟。自行架設的 HTTP 模式預設不啟用驗證(MCP_AUTH_MODE),未設定驗證前不要公開對外開放。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Gdelt Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.cyanheads%2Fgdelt-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "gdelt": {
      "type": "http",
      "url": "https://gdelt.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/gdelt-mcp-server

Search and analyze global news coverage and US television transcripts from the GDELT Project's real-time APIs via MCP. STDIO or Streamable HTTP.

10 Tools

Public Hosted Server: https://gdelt.caseyjhand.com/mcp


Overview

News and TV coverage analysis from the GDELT Project: global news in 65+ languages, and historical TV transcripts across 150+ stations, with coverage dates varying by station. Article search and relative timespan windows cover the last 3 months; explicit dates reach older windows in the coverage timeline's volume and tone modes, the language and country breakdowns, and the tone distribution. Search articles and clips, track coverage spikes, analyze tone, and compare coverage across languages, countries, stations, and shows.

Tools

ToolDescription
gdelt_search_articlesSearch recent global news with full-text and filter operators. Returns every fetched in-window article, up to 250 per call, with date-window continuation guidance at the provider ceiling.
gdelt_get_coverage_timelineTrack normalized coverage, raw matching-article counts with monitored denominators, or average tone. Expand supplied article references for selected timesteps.
gdelt_get_tone_distributionGet a tone histogram (bins ~−30 to +30) showing whether coverage is uniformly negative, bimodal, or clustered near neutral.
gdelt_get_coverage_breakdownCompare coverage by source language or source country. Values are normalized shares of each source population's media output, not additive article counts.
gdelt_search_themesFind GKG theme identifiers for the theme: operator the DOC tools accept — drought finds NATURAL_DISASTER_DROUGHT, cyberattack finds CYBER_ATTACK — ranked by the count GDELT's theme lookup lists.
gdelt_search_tvSearch television news closed captions and return separate station timelines or pooled coverage.
gdelt_get_tv_breakdownRank stations by airtime share or matching-clip count, and shows by share of matching clips.
gdelt_get_tv_clipsRetrieve up to 3,000 matching TV clips with transcript excerpts and Internet Archive viewing links, returning every fetched in-window clip.
gdelt_get_tv_contextGet the most frequent co-occurring words and phrases from GDELT's relevance-ranked sample of TV clips matching a query.
gdelt_list_tv_stationsList TV stations with market, network, and monitoring date ranges — all of them, or filtered by station ID, network, or market — to verify station availability before querying.

Capability reference

gdelt_search_articles tool

  • Full GDELT query syntax: phrases, boolean OR, exclusion, filter operators (sourcecountry:, sourcelang:, domain:, theme:, tone</tone>), proximity (near20:) and repetition (repeat3:) — gdelt_search_themes finds the identifiers theme: takes
  • Configurable sort (relevance, dateDesc, dateAsc, toneDesc, toneAsc, hybridRel) and fetch count, up to 250 per call; larger maxRecords values clamp to 250 by default
  • Returns URL, title, publication date, domain, language, source country, and social image URL
  • Returns every fetched in-window article. At the provider ceiling, continuationWindows gives narrower date windows to re-query (de-duplicate by url). The ceiling is not a cursor; an indivisible window can still contain more matches than GDELT returns
  • Articles outside an explicit startDatetime/endDatetime window are dropped, and the notice counts them

gdelt_get_coverage_timeline tool

  • Four modes: volume (normalized % per timestep), volume_raw (matching-article counts with the monitored-article denominator norm), volume_with_articles (volume plus supplied top articles), and tone (average sentiment)
  • Reference-bearing timesteps carry their first 3 links beside referenceCount, the number of references GDELT supplied, not all matching articles. points: ["<date>"] selects named timesteps with every supplied link; GDELT's reference list itself is capped at ten
  • Pages whole timesteps with offset and limit (default 10, cap 400); nextOffset retrieves the next page. Each series' pointCount and peak cover the full series on every page
  • Smoothing accepts 0–30 timesteps. Width N > 1 returns trailing moving averages: the first N−1 source steps cannot produce a value, and peaks can appear later. In volume_raw, smoothing changes value, not norm
  • Time range uses timespan (up to 3 months) or explicit startDatetime/endDatetime; date resolution (15min/hour/day) is inferred from returned intervals. In volume and tone modes an explicit window may predate the last 3 months; volume_raw and volume_with_articles cover only the last 3 months
  • A points date matching no timestep, or an offset past the last timestep, is rejected with the valid values

gdelt_get_tone_distribution tool

  • Histogram bins from approximately −30 to +30; each bin's count counts matching articles, while referenceCount counts supplied links. The default preview shows 3 links; bins: [<bin>] selects named bins with every supplied link. An unknown bin is rejected with the available bins
  • Summary fields over the whole histogram: peakNegativeBin, peakPositiveBin, neutralPct (% of articles in the −2 to +2 range)
  • Pages whole bins with offset and limit (default 10, cap 400), returning nextOffset when more remain. This is a snapshot across matching articles, unlike the tone timeline
  • Time range uses timespan (up to 3 months) or explicit startDatetime/endDatetime, and an explicit window may predate the last 3 months

gdelt_get_coverage_breakdown tool

  • Breaks down by language or country into a multi-series time series: the top 10 series by summed value, with every other series named in otherSeriesLabels
  • series: ["<label>"] returns only those series, complete, under selectedSeries; a label matching no series is rejected with the available labels
  • Pages whole series with offset and limit (default 10, cap 75), returning nextOffset when more remain. Copy exact labels from the response for series selections
  • Smoothing accepts 0–30 timesteps with the same moving-average disclosure as coverage timelines
  • Time range uses timespan (up to 3 months) or explicit startDatetime/endDatetime, and an explicit window may predate the last 3 months
  • Values are normalized shares of each source's media output, not article counts, so don't sum them across sources

gdelt_search_themes tool

  • Searches the identifiers in GDELT's GKG theme lookup (59,315 themes); each match is the identifier, its listed count, and a paste-ready operator such as theme:TAX_DISEASE_OUTBREAK
  • Case-insensitive, with no stemming or synonyms: words match parts of an identifier (cyberattack → CYBER_ATTACK, plant disease → TAX_PLANTDISEASE). If nothing matches, it retries once with a trailing s dropped (protests → PROTEST) and the notice says so
  • Ranked by exact match, then listed count (a static prevalence figure, not a live article total), then identifier
  • Pages with offset / limit (default 25, cap 100); larger limits clamp by default. nextOffset appears only when more matches remain, and an offset past a non-empty result fails offset_out_of_range
  • Does not queue behind the DOC and TV rate limit

gdelt_search_tv tool

  • Structured stations (e.g. ["CNN", "FOXNEWS"]) preserve the entire requested list. TV queries can also use station, network, or market selectors; verify IDs and coverage dates through the station catalog
  • normalize toggles relative airtime % (default) vs. raw matching 15-second clip counts; optional dateres aggregation (hour/day/week/month/year). TV operators: station:, network:, market:, show:, context:
  • Each series carries station (the ID the stations input takes, FOXNEWS) and stationName (GDELT's label, FOX News). If an ID can't be resolved, the series keeps stationName without station and the notice says so
  • Pages points in date-then-station-name order (default 500, cap 20,000); pass nextOffset with the same inputs for the next page. The text surface's per-station count, sum, and peak cover only the returned page
  • combined: true pools stations into a Combined timeline. Normalized values use pooled matching clips divided by pooled monitored clips, not an average of station percentages; no station ID is assigned to the combined series
  • Smoothing accepts 0–30 timesteps and discloses leading-window loss and possible lag. Recognized upstream date resolution takes precedence over requested or inferred resolution
  • Check station date ranges with gdelt_list_tv_stations before querying recent events

gdelt_get_tv_clips tool

  • Up to 3,000 clips fetched per call, sorted by relevance, date descending, or date ascending; larger maxRecords values clamp to 3,000 by default
  • Each clip: show name, station and stationName (resolved as in gdelt_search_tv, so a series' station passes straight into stations), air timestamp, 15-second transcript excerpt, direct Archive.org link, and optional thumbnail
  • The server requests whole clock hours, so any window width works; clips outside an explicit startDatetime/endDatetime window are dropped and counted in the notice (a timespan call drops nothing)
  • Returns every fetched in-window clip. At the provider ceiling, continuationWindows gives narrower windows to re-query (de-duplicate by archiveUrl); whole-hour retrieval can still prevent reaching every match in a dense hour

gdelt_get_tv_breakdown tool

  • Station rankings report percentages of station airtime by default, or matching 15-second clip counts with normalize: false; resolvable rows include a station ID
  • Show rankings always report percentages of matching clips, including when normalize: false. Labels are preserved exactly, but GDELT sometimes abbreviates them with ellipses, so they are not all reusable show: selectors
  • Rows sort by descending value, then label, with offset / limit paging (default 25, cap 10,000), totalRows, and nextOffset

gdelt_get_tv_context tool

  • Returns the most frequent non-stopword terms co-occurring with the query
  • Terms and scores come from GDELT's sample of the 200 most relevant matching clips, not all coverage; every non-empty response says so in notice. Compare windows or stations with a separate, narrower call for each
  • Relative frequency scores 0–100, where the query term itself scores 100
  • Terms sort by score and page with offset / limit (default 25, cap 25,000). totalTerms counts the returned vocabulary across all pages, not matching clips; nextOffset and truncated disclose remaining terms

gdelt_list_tv_stations tool

  • Returns every station with market, network, monitoring start date, and end date — or only those matching the optional stations, network, and market filters
  • Filters match whole values case-insensitively and combine with AND (network: "FOX" does not match FOXNEWS); activeCount and totalCount count the returned stations
  • A filter or station ID that matches nothing is named in the notice; isActive is true when the end date is within the last 24 hours
  • Use to verify a station was active during a target period, or to find valid station IDs for the stations parameter on other TV tools

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

GDELT-specific:

  • Shared request pacer across the DOC and TV tools: one request in flight at 1 req/5s, with a backoff (5s, doubling to 60s) after any rate-limit response
  • In-process response cache for DOC and TV requests, bounded to 128 MiB. An identical request is answered from memory for 15 minutes (24 hours once its explicit window ended more than a day earlier), without a pacer slot, and concurrent identical calls share one fetch. When GDELT rate-limits the refetch, is unavailable (5xx, timeouts), or answers it empty, the stored answer stands in for up to 24 hours after its fetch (a timespan answer only while younger than the timespan), and the response says so in staleResponse; an invalid query, an unparseable body, or a cancelled call never falls back. A call holding such an answer waits on GDELT at most 45 s, and not at all while the pacer is cooling down after a rate limit
  • Optional local GKG mirror that answers the four DOC tools when the DOC API refuses or returns nothing; see Local GKG mirror
  • Structured stations arrays instead of raw TV query syntax
  • GKG theme lookup held in memory after first download

Agent-friendly output:

  • Query echo on every response: the original query and applied timespan, so calls chain without re-deriving parameters
  • Typed series label fields ("Volume Intensity", "Average Tone", language/country names) instead of positional arrays
  • Station metadata with an isActive boolean and ISO 8601 dates
  • Zero matches return the normal output shape with empty arrays and a notice on how to broaden the query. On the DOC tools the notice also says GDELT returns empty answers when overloaded, so retry before treating the result as no coverage
  • Provenance fields: staleResponse (fetchedAt, ageSeconds, reason) on every DOC and TV tool when a stored answer was served; source, attempts, and coverage on the four DOC tools while a mirror is configured

Getting started

Public Hosted Instance

A public instance is available at https://gdelt.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:

json
{  "mcpServers": {    "gdelt-mcp-server": {      "type": "streamable-http",      "url": "https://gdelt.caseyjhand.com/mcp"    }  }}

Self-Hosted / Local

Add the following to your MCP client configuration file.

json
{  "mcpServers": {    "gdelt-mcp-server": {      "type": "stdio",      "command": "bunx",      "args": ["@cyanheads/gdelt-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info"      }    }  }}

Or with npx (no Bun required):

json
{  "mcpServers": {    "gdelt-mcp-server": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@cyanheads/gdelt-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info"      }    }  }}

Or with Docker:

json
{  "mcpServers": {    "gdelt-mcp-server": {      "type": "stdio",      "command": "docker",      "args": [        "run", "-i", "--rm",        "-e", "MCP_TRANSPORT_TYPE=stdio",        "ghcr.io/cyanheads/gdelt-mcp-server:latest"      ]    }  }}

For Streamable HTTP, set the transport and start the server:

sh
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http# Server listens at http://localhost:3010/mcp

Prerequisites

  • Bun v1.4.0 or higher (or Node.js v24+).
  • No API key required — GDELT is a free public API.

Installation

  1. Clone the repository:
sh
git clone https://github.com/cyanheads/gdelt-mcp-server.git
  1. Navigate into the directory:
sh
cd gdelt-mcp-server
  1. Install dependencies:
sh
bun install
  1. Configure environment:
sh
cp .env.example .env# edit .env if you need to override defaults

Configuration

All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Key environment variables:

VariableDescriptionDefault
GDELT_BASE_URLOverride the GDELT API base URL for both DOC and TV APIs.https://api.gdeltproject.org/api/v2
GDELT_REQUEST_DELAY_MSMinimum milliseconds between GDELT requests (enforces 1 req/5s limit).5300
GDELT_REQUEST_TIMEOUT_MSDeadline for a single GDELT request (a call with retries is bounded at twice this).60000
GDELT_CLAMP_LIMITSClamp oversized positive integer counts to each tool's served cap, with limitClamp, a log, and a counter. Set false to reject above-cap counts instead.true
GDELT_MIRROR_PATHSQLite database file of the local GKG mirror. Unset leaves the mirror off.none
GDELT_MIRROR_WINDOW_DAYSDays of 15-minute GKG slots the mirror keeps, 1–90.7
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTPort for the HTTP server.3010
MCP_HTTP_ENDPOINT_PATHHTTP endpoint path where the MCP server is mounted./mcp
MCP_PUBLIC_URLPublic origin override for TLS-terminating reverse-proxy deployments.none
MCP_AUTH_MODEAuth mode: none, jwt, or oauth.none
MCP_SESSION_MODEHTTP session mode: auto, stateful, or stateless.stateless
MCP_LOG_LEVELLog level (debug, info, warning, error, etc.).info
MCP_GC_PRESSURE_INTERVAL_MSOpt-in Bun-only forced-GC loop interval in ms.0 (disabled)
LOGS_DIRDirectory for log files (Node.js only).<app-root>/logs
STORAGE_PROVIDER_TYPEStorage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1.in-memory
OTEL_ENABLEDEnable OpenTelemetry instrumentation.false

See .env.example for the full list of optional overrides.

Running the server

Local development

  • Build and run:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:stdio# orbun run start:http
  • Run checks and tests:

    sh
    bun run devcheck   # Lint, format, typecheck, security auditbun run test       # Vitest test suitebun run lint:mcp   # Validate MCP definitions against spec

Docker

sh
docker build -t gdelt-mcp-server .docker run --rm -p 3010:3010 gdelt-mcp-server

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/gdelt-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Local GKG mirror

The DOC API sometimes refuses requests for long stretches, or answers empty while overloaded. The optional mirror keeps a local SQLite copy of GDELT's Global Knowledge Graph (GKG), the English and translingual feeds GDELT publishes every 15 minutes on data.gdeltproject.org, so the four DOC tools (gdelt_search_articles, gdelt_get_coverage_timeline, gdelt_get_tone_distribution, gdelt_get_coverage_breakdown) can still answer. It is off unless GDELT_MIRROR_PATH is set. TV tools and theme search never use it.

When it answers. DOC is asked first (a stored answer to the identical request counts as DOC's, and wins over the mirror), and the mirror answers when DOC is rate-limited, unavailable, or returns nothing. An empty DOC answer is replaced only if the mirror finds at least one match. Invalid queries and cancelled calls never reach it. A mirror answer carries source: "gkg_mirror", attempts (what each source did), and coverage when the mirror holds less than the requested window, and the notice says why it answered. When the mirror cannot answer (no completed init, a query operator it can't evaluate, a window outside what it holds), DOC's error is returned with the mirror's reason in the message and a hint.

How its answers differ from DOC's.

  • Keywords match titles and entity names (persons, organizations, locations), not article text. Translated articles keep their source-language titles.
  • theme: matches the exact theme ID. sourcecountry: and country breakdowns use GDELT's 2015 domain-to-country file, which covered 83–92% of sampled rows; matching articles from outlets it doesn't list are left out of country series and counted in the notice.
  • Counts, shares, and the volume_raw denominator are over mirrored articles, so they differ from DOC's figures.
  • nearN:, repeatN:, the image operators (imagetag: and the rest), unknown name: operators, and comparisons other than tone/toneabs are not compiled; a sourcelang: or sourcecountry: value it can't resolve is refused too. It also refuses an unquoted keyword that is one character or contains a hyphen, an OR group that nests or contains an exclusion, an excluded OR group, and a query of more than 100 elements or 1,000 characters. The mirror declines a query that uses any of these, and the error or the attempts detail names which.

Enable it.

  1. Set GDELT_MIRROR_PATH to a database file, and optionally GDELT_MIRROR_WINDOW_DAYS.
  2. Build it once with bun run mirror:init from a checkout. It downloads every 15-minute slot of both feeds in the window, 2 s apart, resumes where it stopped if interrupted, and never runs on server startup.
  3. Start the server. Bun uses its built-in SQLite; on Node, install better-sqlite3 too, or startup fails when GDELT_MIRROR_PATH is set.

With Docker, point the path at a file on a mounted volume (the image creates /var/lib/gdelt-mirror, owned by the bun user) and run the scripts in the container:

sh
docker run -d --name gdelt -p 3010:3010 \  -v gdelt-mirror:/var/lib/gdelt-mirror \  -e GDELT_MIRROR_PATH=/var/lib/gdelt-mirror/gkg.db \  gdelt-mcp-serverdocker exec gdelt bun run mirror:init

bun run mirror:verify (or docker exec gdelt bun run mirror:verify) reports the SQLite integrity check, sync status, row count, and each feed's covered slots and gaps.

Disk and bandwidth. A stored article takes about 1.8 KB, plus about 3 MB for the domain-to-country table. A 7-day window (the default) runs about 3 GB in a typical week and up to about 5.6 GB at weekday peak volume; a busy 15-minute slot holds up to about 4,760 rows across both feeds. The first mirror:init for 7 days fetches about 1,344 files, up to about 12.5 GB, and takes 50–60 minutes, most of it the pause between files. Steady-state refresh downloads 0.56–1.71 GB a day. Size scales with GDELT_MIRROR_WINDOW_DAYS.

Refresh. On HTTP transport the server refreshes the mirror every 15 minutes once a first init has completed. On stdio, run bun run mirror:refresh from cron every 15 minutes. Don't run cron refresh against a store an HTTP server is also refreshing: the result stays consistent, but the downloads are duplicated.

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools and inits services.
src/configServer-specific environment variable parsing and validation with Zod.
src/mcp-server/toolsTool definitions (*.tool.ts). Ten tools across the DOC and TV APIs and the GKG theme lookup.
src/services/gdeltGdeltDocService and GdeltTvService wrapping the DOC and TV APIs, the shared outbound pacer every DOC and TV call queues behind, the response cache that serves repeated and stale answers, the router that falls back to the mirror on DOC calls, and GdeltThemeService for the GKG theme lookup.
src/services/gkg-mirrorThe optional local GKG mirror: feed download and parsing, the SQLite store and its worker thread, the DOC query compiler, and the queries that emulate the four DOC modes.
scriptsRepository tooling, including the mirror:init, mirror:refresh, and mirror:verify scripts.
tests/Unit and integration tests mirroring src/.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools via the barrels in src/mcp-server/tools/definitions/index.ts
  • Wrap GDELT API calls: validate raw JSON → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

來源:README.md,提交 da59e69

工具

10

gdelt_search_articles

Search GDELT Articles

Search the last 3 months of global news coverage (65+ languages) using the GDELT DOC API. Fetches up to 250 articles with URL, title, source domain, language, country, publication date, and social image URL, and returns every fetched article inside the requested window. Query supports full GDELT syntax: phrases ("bird flu"), boolean OR ((flu OR pandemic)), source country (sourcecountry:china), source language (sourcelang:spanish), domain (domain:who.int), GKG theme (theme:TAX_DISEASE_OUTBREAK — find identifiers with gdelt_search_themes), tone filter (tone<-5 for negative), proximity (near20:"flu virus"), and repeat (repeat3:"outbreak"). 250 is a hard per-call ceiling and GDELT offers no cursor: when a query fills it, re-query narrower startDatetime/endDatetime windows — the response hands back the exact windows to use. Note: this API covers only the most recent 3 months — use gdelt_search_tv for historical TV transcripts back to 2009.

輸入參數sortquery必填timespanmaxRecordsendDatetimestartDatetime

gdelt_get_coverage_timeline

Get GDELT Coverage Timeline

Retrieve a time series showing when news coverage of a topic spiked, or how average tone shifted over time. Use mode "volume" for normalized coverage intensity (% of all global coverage per timestep). Use "volume_raw" for distinct matching-article counts per timestep and norm, the unsmoothed monitored-article denominator; smoothed counts are moving averages. Use mode "volume_with_articles" for the same signal plus the top articles that drove each spike — this is the primary signal-detection mode: a single call reveals both the spike and its cause, avoiding a follow-up gdelt_search_articles call. Use mode "tone" for average sentiment score per timestep (negative = hostile/fearful, positive = celebratory). Date resolution is inferred from returned intervals: 15 minutes or hours for short windows, days for longer ones. In volume_with_articles mode each timestep carries its first 3 article links and referenceCount, the number of references GDELT supplied (up to ten), not all matching articles; name timesteps' dates in points to get only those timesteps, each with its full supplied list. A response carries limit timesteps (default 10, cap 400); when more remain it returns nextOffset — pass it back as offset with otherwise identical inputs for the next page. Note: DOC API covers only the last 3 months.

輸入參數modelimitquery必填offsetpointstimespansmoothingendDatetimestartDatetime

gdelt_get_tone_distribution

Get GDELT Tone Distribution

Get the tonal distribution of articles matching a query as a histogram (bins approximately -30 to +30). Unlike a single average tone score, the histogram reveals whether coverage is uniformly negative, bimodal (some articles extremely positive and some extremely negative), or clustered near neutral. Each bin carries its first 3 representative article links and referenceCount, how many GDELT returned; name bins in the bins input to get only those bins, each with every link. A response carries limit bins (default 10, cap 400); when more remain it returns nextOffset — pass it back as offset with otherwise identical inputs for the next page. Distinct from gdelt_get_coverage_timeline (mode: tone) — this is a snapshot distribution across all matching articles, not a time series. Use gdelt_get_coverage_timeline with mode "tone" to see how sentiment shifted over time.

輸入參數binslimitquery必填offsettimespanendDatetimestartDatetime

gdelt_get_coverage_breakdown

Get GDELT Coverage Breakdown

Break down news coverage volume over time by source language or source country, returning a multi-series time series (one series per language or country). Shows which countries or languages drove early vs. late coverage — useful for tracing how a story propagated geographically or across language communities. Returns the top 10 series ranked by the sum of their values and names every other series under otherSeriesLabels — pass any labels, ranked or not, as the series input to get only those series, complete. A response carries limit series (default 10, cap 75); when more remain it returns nextOffset — pass it back as offset with otherwise identical inputs for the next page. Values are normalized: each point is the topic's share of that source's media output, not an absolute article count, so values from different sources do not add up to a share. Small media markets with concentrated coverage therefore rank above large markets with diverse output — a high value means the topic dominated that source's coverage, not that it published the most articles. Use breakdownBy "country" with the signal-detection chain to map geographic attention, or "language" to detect non-English media surges.

輸入參數limitquery必填offsetseriestimespansmoothingbreakdownBy必填endDatetimestartDatetime

gdelt_search_themes

Search GDELT GKG Themes

Find GDELT Global Knowledge Graph (GKG) theme identifiers for the theme: operator that gdelt_search_articles, gdelt_get_coverage_timeline, gdelt_get_tone_distribution, and gdelt_get_coverage_breakdown accept in query. Searches the identifiers in the GDELT GKG theme lookup, which carries no labels or descriptions: every query word must begin one of the _-separated parts of an identifier or run across consecutive parts, or all the words joined must, so "drought" finds NATURAL_DISASTER_DROUGHT, "cyberattack" finds CYBER_ATTACK, "plant disease" finds TAX_PLANTDISEASE, and "wb water" narrows to World Bank water themes. There is no stemming or synonym matching — "displacement" does not reach DISPLACED — except one fallback: when nothing matches, the search retries once with a trailing s dropped from each word of four or more letters, and says so. Matches rank an exact identifier first, then by the count the lookup lists — a static prevalence figure, not a live article total — and each carries a paste-ready operator such as theme:TAX_DISEASE_OUTBREAK. Page with offset and limit (up to 100 matches per page; a larger limit runs at 100).

輸入參數limitquery必填offset

gdelt_search_tv

Search GDELT TV News

Search television news closed captions for spoken mentions of a query. Returns a bounded, paged per-station time series showing airtime devoted to the topic — 500 points by default, up to 20,000 per page. Each series carries GDELT's display name for the station and, when that name resolves to one, the station ID gdelt_get_tv_clips takes as stations. Use stations to select station IDs (e.g. ["CNN", "FOXNEWS", "MSNBC"]), or select with station:, network:, or quoted market: operators in query. TV query also supports in-query operators: station:CNN, network:CBS, market:"National", show:"Anderson Cooper 360", context:"vaccine". Archive coverage varies by station; use gdelt_list_tv_stations for station IDs, network and market values, and monitoring date ranges.

輸入參數limitquery必填offsetdaterescombinedstationstimespannormalizesmoothingendDatetimestartDatetime

gdelt_get_tv_breakdown

Get GDELT TV Breakdown

Rank TV stations or shows mentioning a query. Station values are percentages of each station’s monitored airtime, or raw matching 15-second clip counts with normalize=false. Show values always represent percentages of matching clips, even with normalize=false. Labels are preserved exactly; ellipsized show labels may not work as exact show: selectors. Returns 25 rows by default, up to 10,000 per page. Archive coverage varies by station; use gdelt_list_tv_stations for station IDs, network and market selectors, and monitoring date ranges.

輸入參數limitquery必填offsetstationstimespannormalizebreakdownBy必填endDatetimestartDatetime

gdelt_get_tv_clips

Get GDELT TV Clips

Retrieve the top matching TV news clips for a query from the Internet Archive's Television News Archive: returns every fetched in-window clip, up to 3,000. Each clip includes show name, the station's display name — with its station ID when that name resolves to one — air timestamp, a 15-second transcript excerpt, and a direct link to view the full one-minute clip. Use after gdelt_search_tv to read the actual transcript content driving a coverage spike — pass a series' station value as stations here. GDELT answers TV windows in whole clock hours; clips it returns from outside an explicit startDatetime/endDatetime window are dropped. 3,000 is a hard per-call ceiling and GDELT offers no cursor: when a query fills it, re-query narrower startDatetime/endDatetime windows — the response hands back the exact windows to use. Archive coverage varies by station; use gdelt_list_tv_stations for station IDs and monitoring date ranges.

輸入參數sortquery必填stationstimespanmaxRecordsendDatetimestartDatetime

gdelt_get_tv_context

Get GDELT TV Context

Get the top co-occurring words and phrases from TV news clips matching a query — the vocabulary framing a topic on television. Returns the most frequent non-stopword terms with relative frequency scores (0–100, where 100 = the query term itself). Terms and scores come from GDELT's relevance-ranked sample of matching clips, documented as the 200 most relevant, not all matching coverage — compare windows or stations with a separate, narrower call for each. Use to understand narrative framing, identify related concepts mentioned alongside a topic, or generate follow-up search terms. Returns 25 terms by default, with count pages up to 25,000 terms. Archive coverage varies by station; check gdelt_list_tv_stations for each station’s monitoring date range.

輸入參數limitquery必填offsetstationstimespanendDatetimestartDatetime

gdelt_list_tv_stations

List GDELT TV Stations

List the television stations available for TV search with their market, network, monitoring start date, and monitoring end date — every station by default, or only those matching the optional stations, network, and market filters (each an exact, case-insensitive match; combined with AND). activeCount and totalCount count the returned stations. Stations with an end date within the last 24 hours are flagged as active; stations with earlier end dates are discontinued. Use before querying to verify a station was active during the target time period, or to discover valid station IDs for the stations parameter in other TV tools. Archive coverage varies by station; check each station’s monitoring date range. Use the returned network values with network: and market values with quoted market: selectors in TV queries.

輸入參數marketnetworkstations

版本歷史

8
  1. v0.8.1最新Nov 1, 2026
  2. v0.8.0Nov 1, 2026
  3. v0.7.0Oct 14, 2026
  4. v0.6.1Oct 7, 2026
  5. v0.6.0Sep 25, 2026
  6. v0.4.3Sep 22, 2026
  7. v0.4.2Sep 19, 2026
  8. v0.4.1Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分