Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/gdelt-mcp-server

REMOTE · GDELT.CASEYJHAND.COM · 2 COMPONENTS · SCANNED SEP 22

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

0 this week 79 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security66
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation not fully verified: no authorisation is required to call this server, and 9 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3884 tokens (~431/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.cyanheads/gdelt-mcp-server server?

io.github.cyanheads/gdelt-mcp-server is a hosted endpoint at https://gdelt.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · gdelt.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-gdelt-mcp-server 'https://gdelt.caseyjhand.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "cyanheads-gdelt-mcp-server": {
      "url": "https://gdelt.caseyjhand.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "cyanheads-gdelt-mcp-server": {
      "type": "http",
      "url": "https://gdelt.caseyjhand.com/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.cyanheads-gdelt-mcp-server]
url = "https://gdelt.caseyjhand.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-gdelt-mcp-server": {
      "type": "remote",
      "url": "https://gdelt.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add cyanheads-gdelt-mcp-server --url 'https://gdelt.caseyjhand.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cyanheads-gdelt-mcp-server:
    url: "https://gdelt.caseyjhand.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "cyanheads-gdelt-mcp-server": {
      "Transport": "http",
      "Url": "https://gdelt.caseyjhand.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add cyanheads-gdelt-mcp-server -t streamable-http -u 'https://gdelt.caseyjhand.com/mcp'
// mcp.json
{
  "mcpServers": {
    "cyanheads-gdelt-mcp-server": {
      "type": "http",
      "url": "https://gdelt.caseyjhand.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 0
    • Server version: 0.4.1 → 0.4.2 functional
  • 9 Sept 26 0
    • Stability: 0.97 → pass security
  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 7 Sept 26 −1
    • Stability: pass → 0.93 functional
  • 3 Sept 26 0
    • Server version: 0.4.0 → 0.4.1 functional
  • 31 Aug 26 0
    • Tool “gdelt_get_coverage_timeline” rewrote its description, which is the text the model reads security
    • Tool “gdelt_search_tv” rewrote its description, which is the text the model reads security
    • Server version: 0.3.1 → 0.4.0 functional
    • “gdelt_search_tv” added an optional parameter “limit” cosmetic
    • “gdelt_search_tv” added an optional parameter “offset” cosmetic
    • “gdelt_search_tv” added an optional parameter “dateres” cosmetic
    • “gdelt_search_tv” reworded the description of “normalize” cosmetic
    • “gdelt_search_tv” reworded the description of “stations” cosmetic
    • “gdelt_search_articles” reworded the description of “sort” cosmetic
  • 30 Aug 26 0
    • Server version: 0.2.7 → 0.3.1 functional
    • “gdelt_get_coverage_timeline” reworded the description of “timespan” cosmetic
    • “gdelt_search_articles” reworded the description of “timespan” cosmetic
    • “gdelt_get_tone_distribution” reworded the description of “timespan” cosmetic
    • “gdelt_get_coverage_breakdown” reworded the description of “timespan” cosmetic
  • 26 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 22 Sept 2026 · Probed https://gdelt.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 4 Sept 2026 3 Dec 2026 ECDSA 256 ECDSA-SHA256 a6985204ed51ae050e7738aa6be668e9
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of gdelt.caseyjhand.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
gdelt.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://gdelt.caseyjhand.com/mcp Verified 200
http (plaintext) http://gdelt.caseyjhand.com/mcp HTTPS enforced 301 https://gdelt.caseyjhand.com/mcp
MCP tools · 9 exposed · ~3,675 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
gdelt_get_coverage_breakdown ~527

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 up to 10 series by total volume and aggregates the rest into an "Other" bucket, naming every series it folded in there under otherSeriesLabels — pass any of those labels back as the series input to get that series complete, ranked or not. Values are normalized: each point is the topic's share of media output, not an absolute article count. 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.

NameTypeReqDescription
breakdownBystringyesBreakdown dimension: "language" for source language time series, "country" for source country time series.
endDatetimestringEnd datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240131235959). Must pair with startDatetime; supplying only one of the two is rejected.
querystringyesSearch query using GDELT syntax. Same operators as gdelt_search_articles: phrases, boolean OR, sourcecountry:, sourcelang:, domain:, theme:.
seriesarrayExact series labels to additionally return in full, e.g. ["Portuguese", "Vietnamese"]. Take them verbatim from otherSeriesLabels (the series folded into "Other") or topSeries[].label in a response, o…
startDatetimestringStart datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240101000000). Must pair with endDatetime; supplying only one of the two is rejected.
timespanstringTime window relative to now, minimum "15min"; other examples: "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum 3 months.
NameTypeReqDescription
breakdownBystringBreakdown dimension used for this response.
dateResolutionstringTemporal resolution of data points — 15min, hour, or day.
effectiveQuerystringEchoed query string for use in follow-up calls.
endDatetimestringEchoed end datetime when provided (YYYYMMDDHHMMSS).
errorobjectPresent when the call failed. Absent on success.
noticestringRecovery hint when no breakdown data was returned. Absent on successful responses.
otherAggregatedarrayCombined time series for all series beyond the top 10. Omitted when all series fit.
otherSeriesLabelsarrayLabel of every series folded into otherAggregated, ranked by total volume — the identities the "Other" bucket would otherwise dissolve. Pass any of them to the series input to retrieve that series' c…
selectedSeriesarrayComplete, untruncated time series for each label requested via the series input, in the order requested. Omitted when series was not supplied.
startDatetimestringEchoed start datetime when provided (YYYYMMDDHHMMSS).
topSeriesarrayTop 10 series by total coverage volume.
totalCountnumberTotal number of series returned before truncation to top 10.

No examples provided.

gdelt_get_coverage_timeline ~585

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 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 the text surface shows the first 3 article links per timestep next to that timestep's true article count; name a timestep's date in points to render its full list. Note: DOC API covers only the last 3 months.

NameTypeReqDescription
endDatetimestringEnd datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240131235959). Must pair with startDatetime; supplying only one of the two is rejected.
modestringTimeline mode: "volume" returns normalized coverage % per timestep, "volume_with_articles" returns volume plus top articles per spike (best for signal detection), "tone" returns average sentiment sco…
pointsarrayTimestep dates whose complete article list should be rendered in the text surface, e.g. ["2024-01-05T12:00:00Z"]. Take them verbatim from series[].data[].date in a prior response, or from the list an…
querystringyesSearch query using GDELT syntax. Same operators as gdelt_search_articles: phrases, boolean OR, sourcecountry:, sourcelang:, domain:, theme:, tone<.
smoothingintegerSmoothing window in timesteps (0 = none, 1–5 = moving average width). Reduces noise for spotty topics.
startDatetimestringStart datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240101000000). Must pair with endDatetime; supplying only one of the two is rejected.
timespanstringTime window relative to now, minimum "15min"; other examples: "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum 3 months.
NameTypeReqDescription
dateResolutionstringTemporal resolution of the data points — 15min, hour, or day.
effectiveQuerystringEchoed query string for use in follow-up calls.
endDatetimestringEchoed end datetime when provided (YYYYMMDDHHMMSS).
errorobjectPresent when the call failed. Absent on success.
expandedPointsarrayTimestep dates whose full article list is rendered in the text surface instead of the first 3, echoing the points input. Omitted when points was not supplied. Purely a rendering concern — structuredC…
modestringTimeline mode used for this response.
noticestringRecovery hint when no timeline data was returned. Absent on successful responses.
seriesarrayOne or more time series (typically one for volume/tone, one per label for breakdowns).
startDatetimestringEchoed start datetime when provided (YYYYMMDDHHMMSS).
totalCountnumberTotal number of data points across all series.

No examples provided.

gdelt_get_tone_distribution ~320

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 includes representative article URLs. 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.

NameTypeReqDescription
endDatetimestringEnd datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240131235959). Must pair with startDatetime; supplying only one of the two is rejected.
querystringyesSearch query using GDELT syntax. Same operators as gdelt_search_articles: phrases, boolean OR, sourcecountry:, sourcelang:, domain:, theme:.
startDatetimestringStart datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240101000000). Must pair with endDatetime; supplying only one of the two is rejected.
timespanstringTime window relative to now, minimum "15min"; other examples: "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum 3 months.
NameTypeReqDescription
effectiveQuerystringEchoed query string for use in follow-up calls.
endDatetimestringEchoed end datetime when provided (YYYYMMDDHHMMSS).
errorobjectPresent when the call failed. Absent on success.
histogramarrayTone histogram sorted from most negative to most positive bin.
noticestringRecovery hint when no tone data was returned. Absent on successful responses.
startDatetimestringEchoed start datetime when provided (YYYYMMDDHHMMSS).
summaryobjectSummary statistics derived from the histogram.
totalCountnumberTotal number of articles across all histogram bins.

No examples provided.

gdelt_get_tv_clips ~505

Retrieve the top matching TV news clips (up to 3,000) for a query from the Internet Archive's Television News Archive. Each clip includes show name, station, 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. 3,000 is a hard per-call ceiling and GDELT offers no cursor: when a query fills it, split the run into narrower startDatetime/endDatetime windows — the response hands back the exact windows to use. Archive coverage spans 2009–October 2024.

NameTypeReqDescription
endDatetimestringEnd datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20200131235959). Must pair with startDatetime; supplying only one of the two is rejected.
maxRecordsintegerMaximum number of clips to return (1–3000). 3000 is GDELT's hard per-call ceiling, not a page size — there is no cursor past it, so a query that fills 3000 must be split into narrower startDatetime/e…
querystringyesSearch query for TV transcript content. Same TV operators as gdelt_search_tv: station:CNN, network:CBS, market:"National", show:"Anderson Cooper", context:"vaccine".
sortstringSort order: relevance (default), dateDesc (newest first), dateAsc (oldest first).
startDatetimestringStart datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20200101000000). Must pair with endDatetime; supplying only one of the two is rejected.
stationsarrayStation IDs to filter to (e.g. ["CNN", "FOXNEWS"]). The GDELT TV API requires at least one station — supply it here, or embed a station: selector directly in query. Omitting both is rejected; it does…
timespanstringTime window, e.g. "1m", "6m". Ignored when startDatetime/endDatetime are set. TV data spans 2009–October 2024.
NameTypeReqDescription
clipsarrayMatching TV clips sorted per the sort parameter.
continuationWindowsarrayThe queried window halved, to re-run this query against one pair at a time when maxRecords is at its 3000 ceiling. The halves overlap by one second so no clip falls through the seam; a clip aired on…
effectiveQuerystringEchoed query string for use in follow-up calls.
errorobjectPresent when the call failed. Absent on success.
noticestringDisclosure that the maxRecords cap was reached and more clips may exist, naming the route to them — a higher maxRecords below the 3000 ceiling, or a narrower date window at it. Absent when the full r…
totalCountnumberNumber of clips returned.

No examples provided.

gdelt_get_tv_context ~382

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 from matching clips, with relative frequency scores (0–100, where 100 = the query term itself). Use to understand narrative framing, identify related concepts mentioned alongside a topic, or generate follow-up search terms. TV data spans 2009–October 2024.

NameTypeReqDescription
endDatetimestringEnd datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20200131235959). Must pair with startDatetime; supplying only one of the two is rejected.
querystringyesSearch query for TV transcript content. Same TV operators as gdelt_search_tv: station:CNN, network:CBS, market:"National", show:"Anderson Cooper", context:"vaccine".
startDatetimestringStart datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20200101000000). Must pair with endDatetime; supplying only one of the two is rejected. TV data spans 2009–Octob…
stationsarrayStation IDs to filter to (e.g. ["CNN", "FOXNEWS"]). The GDELT TV API requires at least one station — supply it here, or embed a station: selector directly in query. Omitting both is rejected; it does…
timespanstringTime window, e.g. "1m", "6m". Ignored when startDatetime/endDatetime are set. TV data spans 2009–October 2024.
NameTypeReqDescription
effectiveQuerystringEchoed query string for use in follow-up calls.
errorobjectPresent when the call failed. Absent on success.
noticestringRecovery hint when no context was found. Absent on successful responses.
totalCountnumberNumber of clips from which co-occurrences were computed. Absent when the upstream API does not return a clip count.
wordsarrayCo-occurring terms sorted by score descending.

No examples provided.

gdelt_get_tv_trending ~83

Retrieve trending topics, keywords, and phrases currently dominating US television news across national networks. No query required — returns the top memes of the present news cycle. Updated every 15 minutes. Note: the GDELT TV archive feed stopped updating around October 2024; results from this endpoint reflect that most-recent archived data rather than a live feed.

Input schema present but exposes no named parameters.

NameTypeReqDescription
errorobjectPresent when the call failed. Absent on success.
noticestringRecovery hint when no trending topics were returned. Absent on successful responses.
topicsarrayTrending topics sorted by score descending.
totalCountnumberTotal number of trending topics returned.

No examples provided.

gdelt_list_tv_stations ~106

List all television stations available for TV search with their market, network, monitoring start date, and monitoring end date. 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. Most station monitoring ended October 2024 when the Internet Archive TV feed stopped updating.

Input schema present but exposes no named parameters.

NameTypeReqDescription
activeCountnumberNumber of stations currently flagged as active.
errorobjectPresent when the call failed. Absent on success.
stationsarrayAll TV stations sorted by station ID.
totalCountnumberTotal number of stations in the list.

No examples provided.

gdelt_search_articles ~560

Search the last 3 months of global news coverage (65+ languages) using the GDELT DOC API. Returns up to 250 articles with URL, title, source domain, language, country, publication date, and social image URL. 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:DISEASE_OUTBREAK), 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, split the run into 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.

NameTypeReqDescription
endDatetimestringEnd of date range in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240131235959). Must be supplied together with startDatetime; supplying only one of the two is rejected.
maxRecordsintegerMaximum number of articles to return (1–250). 250 is GDELT's hard per-call ceiling, not a page size — there is no cursor past it, so a query that fills 250 must be split into narrower startDatetime/e…
querystringyesSearch query. Supports GDELT operators: phrases ("bird flu"), boolean OR ((flu OR pandemic)), sourcecountry:china, sourcelang:spanish, domain:who.int, theme:DISEASE_OUTBREAK, tone<-5, near20:"flu vir…
sortstringSort order: relevance (default), dateDesc/dateAsc, toneDesc/toneAsc, or hybridRel (GDELT hybrid relevance and recency).
startDatetimestringStart of date range in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20240101000000). Must be supplied together with endDatetime; supplying only one of the two is rejected.
timespanstringTime window relative to now, minimum "15min"; other examples: "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum is 3 months (the full DOC API window). Defaults to the full 3-…
NameTypeReqDescription
articlesarrayMatching articles sorted per the sort parameter.
continuationWindowsarrayThe queried window halved, to re-run this query against one pair at a time when maxRecords is at its 250 ceiling. The halves overlap by one second so no article falls through the seam; an article pub…
effectiveQuerystringEchoed query string for use in follow-up calls.
errorobjectPresent when the call failed. Absent on success.
noticestringDisclosure that the maxRecords cap was reached and more articles may exist, naming the route to them — a higher maxRecords below the 250 ceiling, or a narrower date window at it. Absent when the full…
timespanstringEchoed timespan parameter when provided.
totalCountnumberNumber of articles returned in this response.

No examples provided.

gdelt_search_tv ~607

Search US television news closed captions (2009–October 2024, 150+ stations) for spoken mentions of a query. Returns a bounded, paged per-station time series showing airtime devoted to the topic. Use the stations parameter to select networks (e.g. ["CNN", "FOXNEWS", "MSNBC"]) — the TV API requires at least one station, supplied either there or as a station: selector inside query. TV query also supports in-query operators: station:CNN, network:CBS, market:"National", show:"Anderson Cooper 360", context:"vaccine". Important: most station monitoring ended October 2024 — use gdelt_list_tv_stations to verify active date ranges before querying recent events.

NameTypeReqDescription
dateresstringOptional GDELT aggregation resolution. Omit to let GDELT choose from the query window; the effective recognized or inferred resolution is returned as dateResolution.
endDatetimestringEnd datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20200131235959). Must pair with startDatetime; supplying only one of the two is rejected.
limitintegerMaximum timeline points returned in this response (1–500).
normalizebooleanWhen true (default), values are normalized as % of total airtime, enabling cross-station comparison. When false, returns raw matching 15-second clip counts.
offsetintegerZero-based point offset into the deterministic date-then-station ordering. Use nextOffset from the preceding response with the same query inputs to retrieve the next page.
querystringyesSearch query for TV transcript content. Supports TV operators: station:CNN, network:CBS, market:"National", show:"Anderson Cooper", context:"vaccine". Boolean OR and phrase operators also work.
smoothingintegerSmoothing window in timesteps (0 = none). Reduces noise for sporadic topics.
startDatetimestringStart datetime in GDELT format YYYYMMDDHHMMSS — exactly 14 digits, no separators (e.g. 20200101000000). Must pair with endDatetime; supplying only one of the two is rejected.
stationsarrayUp to 10 station IDs to filter to (e.g. ["CNN", "FOXNEWS", "MSNBC"]). The GDELT TV API requires at least one station — supply it here, or embed a station: selector directly in query. Omitting both is…
timespanstringTime window, e.g. "1m", "6m", "1y". Ignored when startDatetime/endDatetime are set. TV data spans 2009–October 2024.
NameTypeReqDescription
dateResolutionstringTemporal resolution of data points.
effectiveQuerystringEchoed query string for use in follow-up calls.
errorobjectPresent when the call failed. Absent on success.
limitnumberMaximum points requested for this page.
nextOffsetnumberOffset for the next page using the same query inputs. Absent when this is the final page.
normalizedbooleanTrue when values are normalized coverage percentages.
noticestringRecovery hint when no TV coverage was found. Absent on successful responses.
offsetnumberZero-based offset of this point page.
seriesarrayStation series represented in this point page.
timeRangeobjectDate range spanned by this returned point page.
totalCountnumberNumber of station series returned.
totalPointsnumberTotal points available across all matched station series before pagination.

No examples provided.

Common questions

What is the io.github.cyanheads/gdelt-mcp-server server?

io.github.cyanheads/gdelt-mcp-server is listed in the public MCP registry as io.github.cyanheads/gdelt-mcp-server. Search and analyze global news coverage and US TV transcripts via the GDELT Project APIs. This page covers its hosted endpoint (https://gdelt.caseyjhand.com/mcp).

Is the io.github.cyanheads/gdelt-mcp-server server safe to use?

io.github.cyanheads/gdelt-mcp-server scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/gdelt-mcp-server server expose?

io.github.cyanheads/gdelt-mcp-server exposes 9 tools: gdelt_search_articles, gdelt_get_coverage_timeline, gdelt_get_tone_distribution, gdelt_get_coverage_breakdown, gdelt_search_tv, and 4 more. Their descriptions and schemas cost roughly 3,675 tokens of context every time the server is loaded.

Does the io.github.cyanheads/gdelt-mcp-server server require authentication?

No. We connected to io.github.cyanheads/gdelt-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/gdelt-mcp-server server still maintained?

io.github.cyanheads/gdelt-mcp-server is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.