gdelt-mcp-server
Server Details
Search and analyze global news coverage and US TV transcripts via the GDELT Project APIs.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/gdelt-mcp-server
- GitHub Stars
- 2
- Server Listing
- @cyanheads/gdelt-mcp-server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.6/5 across 9 of 9 tools scored.
Each tool targets a distinct resource or analytic view: article search, TV search, TV clips, TV context, TV trending, station listing, coverage timeline, coverage breakdown, and tone distribution. Where overlap exists (coverage_timeline mode:tone vs tone_distribution), the descriptions explicitly call out the difference, so an agent can select correctly.
All tools follow a consistent gdelt_verb_noun pattern (get_, search_, list_), using lowercase with underscores. The verb and object combination is predictable and readable, with no mixed conventions.
With 9 tools spanning search, retrieval, and analytics, the count is well within the ideal range. Each tool serves a distinct purpose without redundancy, making the set easy to navigate.
The tool surface covers the major GDELT DOC and TV APIs, including article search, TV search and clips, contextual analysis, and coverage metrics. Missing are the GDELT Events API and direct article-by-ID retrieval, but these are not core to the described workflows, and the 3-month DOC limit is an API constraint rather than a tool gap.
Available Tools
9 toolsgdelt_get_coverage_breakdownGet GDELT Coverage BreakdownARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query using GDELT syntax. Same operators as gdelt_search_articles: phrases, boolean OR, sourcecountry:, sourcelang:, domain:, theme:. | |
| series | No | Exact 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, or from the label list an unknown_series error prints. Each one comes back complete under selectedSeries, on top of the usual top-10 overview; a label that matches nothing is rejected rather than silently skipped. Omit to get the overview alone. | |
| timespan | No | Time window relative to now, e.g. "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum 3 months. | |
| breakdownBy | Yes | Breakdown dimension: "language" for source language time series, "country" for source country time series. | |
| endDatetime | No | End 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. | |
| startDatetime | No | Start 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when no breakdown data was returned. Absent on successful responses. |
| topSeries | Yes | Top 10 series by total coverage volume. |
| totalCount | Yes | Total number of series returned before truncation to top 10. |
| breakdownBy | Yes | Breakdown dimension used for this response. |
| endDatetime | No | Echoed end datetime when provided (YYYYMMDDHHMMSS). |
| startDatetime | No | Echoed start datetime when provided (YYYYMMDDHHMMSS). |
| dateResolution | Yes | Temporal resolution of data points. |
| effectiveQuery | Yes | Echoed query string for use in follow-up calls. |
| selectedSeries | No | Complete, untruncated time series for each label requested via the series input, in the order requested. Omitted when series was not supplied. |
| otherAggregated | No | Combined time series for all series beyond the top 10. Omitted when all series fit. |
| otherSeriesLabels | No | Label 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' complete data. Omitted when all series fit in the top 10. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint annotation by disclosing key behaviors: values are normalized ('each point is the topic's share of media output, not an absolute article count'), the ranking implication ('Small media markets with concentrated coverage therefore rank above large markets'), and the 'Other' bucket aggregation with verbose labels. It also explains error handling for bad series labels in the schema, but the main description adds significant interpretive context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: core function, use cases, bucket behavior, normalization caveat, and mode-specific guidance. It is front-loaded with the primary purpose in the first sentence, and no redundant or filler content is present. The length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, an output schema exists, and annotations declare read-only/open-world hints, the description still adds essential context: the normalization semantics, the 'Other' bucket behavior, and the practical interpretations for 'country' vs. 'language'. This fully equips an agent to select and invoke the tool correctly without needing to infer hidden behaviors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds meaning beyond the schema by explaining how to use the series parameter ('pass any of those labels back as the series input to get that series complete, ranked or not') and how breakdownBy choice affects interpretation (geographic vs. language surge). This supplemental guidance elevates it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Break down news coverage volume over time by source language or source country, returning a multi-series time series.' This clearly distinguishes it from siblings like gdelt_get_coverage_timeline (which likely shows an overall timeline) and gdelt_get_tone_distribution (tone analysis). The verb 'break down' and the breakdownBy dimension make the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage guidance: 'Use breakdownBy "country" with the signal-detection chain to map geographic attention, or "language" to detect non-English media surges.' It also explains how to drill down into 'Other' series by passing labels back via the series parameter. However, it does not explicitly state when not to use this tool or name alternatives, so it stops short of the full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_get_coverage_timelineGet GDELT Coverage TimelineARead-onlyInspect
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 automatically chosen based on timespan: 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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Timeline 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 score per timestep. | volume |
| query | Yes | Search query using GDELT syntax. Same operators as gdelt_search_articles: phrases, boolean OR, sourcecountry:, sourcelang:, domain:, theme:, tone<. | |
| points | No | Timestep 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 unknown_point error prints. Only affects volume_with_articles rendering — every timestep already carries its full article list in structuredContent regardless. Timesteps not named here show their first 3 links; a date matching no timestep is rejected rather than silently ignored. | |
| timespan | No | Time window relative to now, e.g. "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum 3 months. | |
| smoothing | No | Smoothing window in timesteps (0 = none, 1–5 = moving average width). Reduces noise for spotty topics. | |
| endDatetime | No | End 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. | |
| startDatetime | No | Start 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | Timeline mode used for this response. |
| notice | No | Recovery hint when no timeline data was returned. Absent on successful responses. |
| series | Yes | One or more time series (typically one for volume/tone, one per label for breakdowns). |
| totalCount | Yes | Total number of data points across all series. |
| endDatetime | No | Echoed end datetime when provided (YYYYMMDDHHMMSS). |
| startDatetime | No | Echoed start datetime when provided (YYYYMMDDHHMMSS). |
| dateResolution | Yes | Temporal resolution of the data points — hour for short windows, day for longer. |
| effectiveQuery | Yes | Echoed query string for use in follow-up calls. |
| expandedPoints | No | Timestep 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 — structuredContent carries every article for every timestep either way. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the readOnly/openWorld annotations: automatic date-resolution selection, rendering behavior of article links (first 3 vs full list via points), handling of unknown timesteps, and the 3-month DOC API coverage limit. These details meaningfully inform invocation and interpretation without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense paragraph but front-loaded with the core purpose and mode guidance. Every sentence carries useful information, though the prose could be broken into bullets for readability. No wasted words, but slightly long given the redundant mode explanations already present in the schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to explain return values, and it covers key constraints (3-month limit, automatic date resolution, text-surface behavior, unknown_point errors). It provides enough operational context for correct use alongside seven parameters and rich annotations, making the tool complete to invoke blindly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description enriches the mode semantics (especially volume_with_articles as 'primary signal-detection mode') and explains the points parameter's rendering effects. It does not deeply explain smoothing or datetime pairing, as the schema already covers those, so it earns a 4 rather than 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Retrieve a time series') and clarifies the tool's scope via three distinct modes (volume, volume_with_articles, tone). It distinguishes itself from siblings by emphasizing time-series output and explicitly references gdelt_search_articles as an alternative that this tool can make unnecessary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance for each mode ('Use mode "volume" for...', 'Use mode "volume_with_articles" for...', 'Use mode "tone" for...'). It also names an alternative tool (gdelt_search_articles) and explains when this tool avoids a follow-up call, satisfying the when/when-not/alternatives criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_get_tone_distributionGet GDELT Tone DistributionARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query using GDELT syntax. Same operators as gdelt_search_articles: phrases, boolean OR, sourcecountry:, sourcelang:, domain:, theme:. | |
| timespan | No | Time window relative to now, e.g. "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum 3 months. | |
| endDatetime | No | End 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. | |
| startDatetime | No | Start 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when no tone data was returned. Absent on successful responses. |
| summary | Yes | Summary statistics derived from the histogram. |
| histogram | Yes | Tone histogram sorted from most negative to most positive bin. |
| totalCount | Yes | Total number of articles across all histogram bins. |
| endDatetime | No | Echoed end datetime when provided (YYYYMMDDHHMMSS). |
| startDatetime | No | Echoed start datetime when provided (YYYYMMDDHHMMSS). |
| effectiveQuery | Yes | Echoed query string for use in follow-up calls. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar is lower. The description adds valuable behavioral context: bins are approximately -30 to +30, each bin includes representative article URLs, and the result is a snapshot distribution across all matching articles. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: defining the histogram, explaining why it's useful, and differentiating from the timeline tool. It is front-loaded with the core purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema and complete parameter schema coverage, the description covers the remaining context: the nature of the histogram, the semantic difference from a single tone score, and the alternative tool for time-series analysis. It is complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description references 'query' but does not add new semantic detail beyond the schema, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: getting the tonal distribution of articles as a histogram, with a specific bin range (-30 to +30). It explicitly distinguishes itself from gdelt_get_coverage_timeline (mode: tone), making its unique function clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance by contrasting with a single average tone score and with gdelt_get_coverage_timeline. It even names the alternative tool and mode ('tone') for time-series sentiment analysis, which is a clear exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_get_tv_clipsGet GDELT TV ClipsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order: relevance (default), dateDesc (newest first), dateAsc (oldest first). | relevance |
| query | Yes | Search query for TV transcript content. Same TV operators as gdelt_search_tv: station:CNN, network:CBS, market:"National", show:"Anderson Cooper", context:"vaccine". | |
| stations | No | Station 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 not fall back to all stations. Use gdelt_list_tv_stations to see valid IDs. | |
| timespan | No | Time window, e.g. "1m", "6m". Ignored when startDatetime/endDatetime are set. TV data spans 2009–October 2024. | |
| maxRecords | No | Maximum 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/endDatetime windows instead. | |
| endDatetime | No | End 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. | |
| startDatetime | No | Start 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| clips | Yes | Matching TV clips sorted per the sort parameter. |
| notice | No | Disclosure 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 result set fit under the cap. |
| totalCount | Yes | Number of clips returned. |
| effectiveQuery | Yes | Echoed query string for use in follow-up calls. |
| continuationWindows | No | The 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 that second can come back in both, so de-duplicate by archiveUrl. Absent unless the ceiling was reached with a window that is both known and wide enough to divide. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint and openWorldHint annotations, the description adds critical behavioral context: the hard 3,000-per-call ceiling, the lack of a cursor, and the instruction to split queries using time windows. It also discloses the archive's coverage span (2009–October 2024) and the response's behavior of returning exact windows to use. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense. It front-loads the core purpose, then supplies relevant usage context, a key limitation, and a temporal boundary. Each sentence earns its place without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 params, output schema), the description covers the tool's purpose, its role in the workflow (after gdelt_search_tv), the pagination limitation, and the archive's time span. The output schema handles return-value details, so the description remains focused on behavior and constraints, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation covers 100% of parameters with detailed descriptions, so baseline is 3. The description adds semantic value by linking the maxRecords ceiling to the startDatetime/endDatetime splitting strategy, which is not explicitly stated in the schema. This helps the agent understand how the parameters interact in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Retrieve') and resource ('top matching TV news clips'), and specifies what each clip includes. It also distinguishes the tool from siblings like gdelt_get_coverage_breakdown or gdelt_get_tv_trending by focusing on transcript content, making the tool's unique purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use after gdelt_search_tv', providing clear sequencing/context. It also gives practical guidance for handling the 3,000-clip ceiling by splitting into narrower startDatetime/endDatetime windows. However, it doesn't explicitly contrast with alternative sibling tools (e.g., when not to use gdelt_get_tv_context), so it stops short of full alternative differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_get_tv_contextGet GDELT TV ContextARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for TV transcript content. Same TV operators as gdelt_search_tv: station:CNN, network:CBS, market:"National", show:"Anderson Cooper", context:"vaccine". | |
| stations | No | Station 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 not fall back to all stations. Use gdelt_list_tv_stations to see valid IDs. | |
| timespan | No | Time window, e.g. "1m", "6m". Ignored when startDatetime/endDatetime are set. TV data spans 2009–October 2024. | |
| endDatetime | No | End 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. | |
| startDatetime | No | Start 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–October 2024. |
Output Schema
| Name | Required | Description |
|---|---|---|
| words | Yes | Co-occurring terms sorted by score descending. |
| notice | No | Recovery hint when no context was found. Absent on successful responses. |
| totalCount | No | Number of clips from which co-occurrences were computed. Absent when the upstream API does not return a clip count. |
| effectiveQuery | Yes | Echoed query string for use in follow-up calls. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, which covers safety. The description adds valuable behavioral detail beyond annotations: returns non-stopword terms, relative frequency scores 0–100 with 100 meaning the query term itself, and the TV data timespan (2009–October 2024). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: first sentence states purpose, second explains output format, third gives usage scenarios, and fourth adds temporal scope. No wasted sentences; every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, rich input schema, and annotations, the description covers purpose, output semantics, use cases, and data span. It doesn't need to explain return values or safety (already in schema/annotations). Slight repetition of the data span in the schema is minor, but overall the description is suitably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already provides rich parameter details (e.g., query operators, station requirements, datetime format rules). The description adds minimal parameter-specific meaning beyond 'matching a query,' so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get the top co-occurring words and phrases from TV news clips matching a query' and explains what it returns. It distinguishes itself from siblings like gdelt_search_tv (search results) and gdelt_get_tv_clips (clips) by focusing on vocabulary/framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'Use to understand narrative framing, identify related concepts mentioned alongside a topic, or generate follow-up search terms.' It does not explicitly name alternatives or exclusion criteria, but the use-case guidance is clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_get_tv_trendingGet GDELT TV TrendingARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when no trending topics were returned. Absent on successful responses. |
| topics | Yes | Trending topics sorted by score descending. |
| totalCount | Yes | Total number of trending topics returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/openWorld annotations by disclosing the 15-minute update frequency and the critical caveat that the GDELT TV archive feed stopped updating around October 2024, so results are stale archived data rather than live. This is essential behavioral context for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, tightly packed with useful information: the purpose, scope, no-query requirement, update cadence, and the data staleness warning. No filler or repetition; front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description fully covers what the agent needs: purpose, source, update frequency, and a clear data-freshness caveat. The output schema handles return values, so no extra explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, which yields a baseline of 4. The description adds value by stating 'No query required,' explaining why the input schema is empty and reinforcing that no parameter is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and clearly identifies the resource (trending topics, keywords, and phrases dominating US television news) and scope (national networks). It stands apart from sibling tools like gdelt_search_tv and gdelt_get_tv_clips by focusing on the top 'memes' of the current news cycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: 'No query required — returns the top memes of the present news cycle' signals this is for a high-level overview of current trends. However, it does not explicitly name alternatives or say when not to use it, though sibling tool names imply such distinctions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_list_tv_stationsList GDELT TV StationsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| stations | Yes | All TV stations sorted by station ID. |
| totalCount | Yes | Total number of stations in the list. |
| activeCount | Yes | Number of stations currently flagged as active. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description aligns with that. It adds valuable behavior beyond annotations: the flagging logic for active/discontinued stations based on 24-hour thresholds, and the critical context that monitoring ended October 2024. This transparency helps the agent interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each delivering critical information: purpose, active/discontinued interpretation, usage context, and monitoring end date. It is front-loaded with the main purpose and contains no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless listing tool with an output schema, the description fully covers what the tool does, how to interpret its results, when to use it, and an important external constraint (Internet Archive TV feed ending). The output schema handles return format specifics, so no additional return-value explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are a non-issue. The baseline for no parameters is 4, and the description appropriately focuses on the output semantics (what station metadata is returned and how to interpret the dates).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb and resource: 'List all television stations available for TV search' and specifies the returned fields (market, network, monitoring dates). It is distinct from sibling tools like search_tv or get_tv_clips, as it focuses on station metadata, not content or analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use before querying to verify a station was active during the target time period, or to discover valid station IDs.' It does not explicitly mention when not to use it or name alternatives, but the guidance is specific and actionable within the context of sibling TV tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_search_articlesSearch GDELT ArticlesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order: relevance (default), date (newest first), social (most socially shared). | relevance |
| query | Yes | Search 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 virus", repeat3:"outbreak". | |
| timespan | No | Time window relative to now, e.g. "24h", "7d", "1m". Ignored when startDatetime/endDatetime are set. Maximum is 3 months (the full DOC API window). Defaults to the full 3-month window. | |
| maxRecords | No | Maximum 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/endDatetime windows instead. | |
| endDatetime | No | End 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. | |
| startDatetime | No | Start 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Disclosure 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 result set fit under the cap. |
| articles | Yes | Matching articles sorted per the sort parameter. |
| timespan | No | Echoed timespan parameter when provided. |
| totalCount | Yes | Number of articles returned in this response. |
| effectiveQuery | Yes | Echoed query string for use in follow-up calls. |
| continuationWindows | No | The 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 published on that second can come back in both, so de-duplicate by url. Absent unless the ceiling was reached with a window that is both known and wide enough to divide. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint and openWorldHint annotations, the description adds crucial behavioral context: the hard 250 per-call ceiling, absence of cursor pagination, the need to split runs into narrower windows, and that the response returns the exact windows to use. This goes well beyond annotations and no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but every sentence carries meaningful information: scope, fields, query syntax, ceiling behavior, and sibling alternative. It is well front-loaded with the core purpose, and the density of actionable content justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully accounts for the tool's complexity: it explains the return fields, query operators, pagination limitations, date window handling, and relationship to sibling tools. With the output schema also present, an agent has everything needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the 250 limit in relation to maxRecords, mandating startDatetime/endDatetime pairing, and providing rich query syntax examples that the schema only lists without contextual detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource ('Search the last 3 months of global news coverage using the GDELT DOC API') and differentiates from siblings by naming the TV search alternative. It lists return fields, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides both when to use this tool (for recent 3 months of news) and when to use an alternative ('use gdelt_search_tv for historical TV transcripts back to 2009'). Also gives operational guidance on splitting queries when hitting the 250-article ceiling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdelt_search_tvSearch GDELT TV NewsARead-onlyInspect
Search US television news closed captions (2009–October 2024, 150+ stations) for spoken mentions of a query. Returns a normalized per-station time series showing relative 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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search 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. | |
| stations | No | 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 rejected; it does not fall back to all stations. Use gdelt_list_tv_stations to see valid station IDs. | |
| timespan | No | Time window, e.g. "1m", "6m", "1y". Ignored when startDatetime/endDatetime are set. TV data spans 2009–October 2024. | |
| normalize | No | When true (default), values are normalized as % of total airtime, enabling cross-station comparison. When false, returns raw coverage volume. | |
| smoothing | No | Smoothing window in timesteps (0 = none). Reduces noise for sporadic topics. | |
| endDatetime | No | End 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. | |
| startDatetime | No | Start 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when no TV coverage was found. Absent on successful responses. |
| series | Yes | One series per station or combined national coverage. |
| timeRange | Yes | Date range spanned by the returned data. |
| normalized | Yes | True when values are normalized coverage percentages. |
| totalCount | Yes | Number of station series returned. |
| dateResolution | Yes | Temporal resolution of data points. |
| effectiveQuery | Yes | Echoed query string for use in follow-up calls. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld), the description discloses a major limitation (station monitoring ended October 2024), a hard requirement (must provide at least one station, omitting both is rejected), and a pairing constraint for startDatetime/endDatetime. It also clarifies normalization vs. raw values. These are non-obvious behaviors an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense. It front-loads the core purpose, then explains return value, gives concrete operator examples, and closes with a critical caveat. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a rich output schema, the description still covers essential context: coverage timeframe, 150+ stations, station requirement, operator syntax, normalization behavior, and the October 2024 shutdown. It also links to a sibling tool for coverage validation, making it self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all 7 parameters with detailed descriptions (100% coverage), so the description adds little semantic value beyond the schema. The main description reinforces the station: operator and station requirement, but these are already documented in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search US television news closed captions... for spoken mentions of a query.' It clearly differentiates from siblings like gdelt_search_articles (TV vs. articles) and gdelt_list_tv_stations (search vs. list). The return type (normalized per-station time series) further pins down the function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool (for TV closed captions), gives operational prerequisites (station required, either via parameter or query selector), and recommends the alternative gdelt_list_tv_stations to verify coverage date ranges. This is concrete, actionable usage guidance beyond mere purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- Flicense-qualityBmaintenanceEnables macro/geopolitical event detection by wrapping the GDELT 2.0 API, providing tools for searching events, trending actors, and sentiment timeseries from global news.Last updated1
- Alicense-qualityCmaintenanceEnables querying the GDELT database for global events, language, and tone data through natural language.Last updated21MIT
- AlicenseAqualityDmaintenanceProvides access to the GDELT DOC 2.0 API for searching global news articles and images across 65 languages with customizable timespans and query options.Last updated2272MIT
- Alicense-qualityBmaintenanceA remote, read-only MCP server for global media intelligence using GDELT DOC 2.0 API, enabling search and analysis of multilingual news coverage, tone, and attention trends.Last updatedMIT
Your Connectors
Sign in to create a connector for this server.