SkillAgentSearch skills...

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.

Install / Use

claude mcp add cyanheads -- npx -y github:cyanheads/gdelt-mcp-server

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

84/100

Category

Operations

Supported Platforms

Claude Code
Claude Desktop

Our assessment of gdelt-mcp-server

gdelt-mcp-server scores 84/100 on our quality scale, 554th of 753 Operations skills we index.

Its MCP Server is 16 KB long, well organised into 26 sections with 11 code examples: a thorough specification that gives an agent plenty to work with.

It has 10 GitHub stars, so there is little community track record yet; judge it on its content.

Substance
30/30
Structure
20/20
Description
15/15
Adoption
4/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 4 days ago, so gdelt-mcp-server is actively maintained.
  • Our last check on 2026-08-16 found the source still online.
  • It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 97/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

Safety scan

No issues found

Our scan of the first 100 KB of the file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.

Automated pattern scan on 2026-11-06. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.

gdelt-mcp-server compared with similar skills

All 4 of these similar skills score higher than gdelt-mcp-server; compare them before choosing.

SkillScoreStarsUpdatedFormat
gdelt-mcp-server (this skill)by cyanheads84104d agoMCP Server
Agent-Reachby Panniantong100109.3k1d agoCLAUDE.md
headroomby headroomlabs-ai10079.0ktodayCLAUDE.md
CowAgentby zhayujie10047.8k1d agoCLAUDE.md
Scraplingby D4Vinci10098.3ktodayMCP Server

Frequently asked questions

How do I install gdelt-mcp-server?
Run claude mcp add cyanheads -- npx -y github:cyanheads/gdelt-mcp-server. The install tabs above show the steps for each supported agent.
Which AI agents does gdelt-mcp-server work with?
It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
Is gdelt-mcp-server safe to use?
Our scan of the first 100 KB of the file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is Apache-2.0-licensed and scores 97/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is gdelt-mcp-server still maintained?
The repository was last updated 4 days ago, so gdelt-mcp-server is actively maintained.
<div align="center"> <h1>@cyanheads/gdelt-mcp-server</h1> <p><b>Search and analyze global news coverage and US television transcripts via the GDELT Project's real-time APIs via MCP. STDIO or Streamable HTTP.</b> <div>9 Tools</div> </p> </div> <div align="center">

Version License Docker MCP SDK npm TypeScript Bun

</div> <div align="center">

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

</div> <div align="center">

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

</div>

Tools

Nine tools across two GDELT APIs — DOC API for global print/web news (last 3 months, 65 languages, no auth) and TV API for US television transcripts (2009–Oct 2024, 150+ stations):

| Tool | Description | |:---|:---| | gdelt_search_articles | Search the last 3 months of global news coverage (65 languages) with full-text and filter operators. Returns up to 250 articles, and hands back the date windows to re-query when that ceiling is hit. | | gdelt_get_coverage_timeline | Retrieve a time series of coverage volume or average tone for a query. volume_with_articles mode includes top articles per spike timestep, with points to render a timestep's full article list. | | gdelt_get_tone_distribution | Get a tone histogram (bins ~−30 to +30) showing whether coverage is uniformly negative, bimodal, or clustered near neutral. | | gdelt_get_coverage_breakdown | Break down coverage volume by source language or source country — a multi-series time series showing geographic propagation. Values are normalized shares of media output, not article counts. | | gdelt_search_tv | Search US television news closed captions (2009–Oct 2024) and return per-station airtime time series. | | gdelt_get_tv_clips | Retrieve up to 3,000 matching TV clips with transcript excerpts and Internet Archive viewing links, and the date windows to re-query when that ceiling is hit. | | gdelt_get_tv_context | Get the most frequent co-occurring words and phrases from TV clips matching a query. | | gdelt_get_tv_trending | Retrieve trending topics currently dominating US television news (updated every 15 minutes; no query required). | | gdelt_list_tv_stations | List all TV stations with market, network, and monitoring date ranges to verify station availability before querying. |

gdelt_search_articles

Search the last 3 months of global news with GDELT's full query syntax.

  • Keywords, phrases ("bird flu"), boolean OR, and exclusion (-sports)
  • Filter operators: sourcecountry:, sourcelang:, domain:, theme: (GKG taxonomy), tone</tone>
  • Proximity and repetition: near20:"flu virus", repeat3:"outbreak"
  • Configurable sort (relevance, date) and result count (up to 250)
  • Returns URL, title, publication date, domain, language, source country, and social image URL
  • 250 is a hard per-call ceiling, not a page size — GDELT exposes no cursor. Fill it and the response returns continuationWindows: the queried window halved, ready to re-query. The halves overlap by a second so nothing falls through the seam; de-duplicate by url
  • Query is echoed in response for chaining

gdelt_get_coverage_timeline

Retrieve when coverage of a topic spiked, with three modes:

  • volume — normalized percentage of all global coverage per timestep
  • volume_with_articles — volume plus top articles driving each spike; use for signal detection without a follow-up search call
  • tone — average sentiment score per timestep (combine with gdelt_get_tone_distribution for the full picture)
  • Every article reference is always in structuredContent; the text surface renders the first 3 links per timestep beside that timestep's true count, and points: ["<date>"] renders named timesteps in full
  • Configurable smoothing and time range

gdelt_get_tone_distribution

Snapshot tone histogram across all articles matching a query.

  • Bins from approximately −30 to +30; each bin includes representative article URLs
  • Summary fields: peakNegativeBin, peakPositiveBin, neutralPct (% of articles in the −2 to +2 range)
  • Distinct from the tone timeline — distribution across all matching articles, not over time

gdelt_get_coverage_breakdown

Multi-series time series showing which countries or languages drove coverage.

  • Break down by language or country
  • Top 10 series by total volume; remaining series aggregated into an "Other" bucket and named in otherSeriesLabels
  • Nothing is dissolved into "Other" anonymously — pass any label to series: ["<label>"] and that series comes back complete under selectedSeries, alongside the usual overview
  • Values are normalized — the topic's share of media output, not absolute article counts. Small media markets with concentrated coverage rank above large markets with diverse output, so a high value means the topic dominated that source's coverage rather than that it published the most articles
  • Use to trace how a story propagated geographically

gdelt_search_tv

Search US television news transcripts (2009–Oct 2024) with per-station airtime analysis.

  • Structured stations parameter (e.g. ["CNN", "FOXNEWS"]) — the server embeds station filters in the query string
  • Normalize results to relative % or return raw counts
  • TV-specific operators: market:, show:, context:
  • Use gdelt_list_tv_stations to verify station active date ranges before querying recent events

gdelt_get_tv_clips

Retrieve actual TV news clips driving a coverage signal.

  • Up to 3,000 clips per call
  • Each clip: show name, station, air timestamp, 15-second transcript excerpt, direct Archive.org link, and optional thumbnail
  • 3,000 is a hard per-call ceiling, not a page size — GDELT exposes no cursor. Fill it and the response returns continuationWindows: the queried window halved, ready to re-query. The halves overlap by a second so nothing falls through the seam; de-duplicate by archiveUrl
  • Sort by relevance, date descending, or date ascending

gdelt_get_tv_context

Vocabulary framing analysis for TV coverage of a topic.

  • Returns the most frequent non-stopword terms from matching clips
  • Relative frequency scores (query term = 100)
  • Use to identify narrative framing, related concepts, or follow-up search terms

gdelt_get_tv_trending

Zero-argument entry point for the current TV news cycle.

  • Returns trending topics, keywords, and phrases dominating national networks
  • Updated every 15 minutes
  • Note: coverage data ends Oct 2024; results reflect the archive endpoint, not a live feed

gdelt_list_tv_stations

Station metadata lookup before querying.

  • All available stations with market, network, monitoring start date, and end date
  • isActive flag — true when end date is within the last 24 hours
  • Use to verify a station was active during a target time period

Features

Built on @cyanheads/mcp-ts-core:

  • Declarative tool definitions — single file per tool, framework handles registration and validation
  • Unified error handling — handlers throw, framework catches, classifies, and formats
  • Pluggable auth: none, jwt, oauth
  • Swappable storage backends: in-memory, filesystem, Supabase, Cloudflare KV/R2/D1
  • Structured logging with optional OpenTelemetry tracing
  • STDIO and Streamable HTTP transports

GDELT-specific:

  • Shared rate-limit queue (1 req/5s) across all tools — enforces GDELT's published limit without caller coordination
  • Two service layers (GdeltDocService, GdeltTvService) mapping clean tool parameters to the DOC and TV API URL conventions
  • TV station filter operators embedded in query strings internally — callers pass structured stations arrays, not raw query syntax

Agent-friendly output:

  • Query echo on every response — searches return the original query and applied timespan so agents can chain calls without re-deriving parameters
  • Discriminated series labels — timeline and breakdown responses carry typed label fields ("Volume Intensity", "Average Tone", language/country names) rather than positional arrays
  • Structured station metadata — isActive boolean and ISO 8601 date fields let agents reason about TV station availability without parsing date strings
  • Partial-coverage signals in distribution output — neutralPct, peakNegativeBin, peakPositiveBin summary fields let agents branch on sentiment without histogramming the raw bins themselves

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:

{
  "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.

{
  "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):

{
  "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:

{
  "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:

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

Prerequisites

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

Installation

  1. Clone the repository:
git clone https://github.com/cyanheads/g

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars10
CategoryOperations
Updated4d ago
Forks2

Languages

TypeScript

Trust signals

97/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

1 info