extract_gdelt
Fetch global news intelligence from GDELT Project to monitor worldwide news in 100+ languages, updated every 15 minutes, covering topics Western sources often miss.
Instructions
Fetch global news intelligence from the GDELT Project. GDELT monitors broadcast, print, and web news from every country in 100+ languages, updated every 15 minutes. Returns articles with title, source domain, country of origin, language, and publication date — covering news worldwide that Western sources miss. Free, no auth. Pass any company name, topic, or keyword. Unique: not available in any other MCP server.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Query: company name, topic, or keyword e.g. 'Palantir', 'artificial intelligence', 'MCP server' | |
| max_length | No |
Implementation Reference
- src/adapters/gdelt.ts:128-136 (handler)The core logic for fetching and processing GDELT news intelligence.
export async function gdeltAdapter(options: ExtractOptions): Promise<AdapterResult> { const query = (options.url ?? "").trim(); const maxLength = options.maxLength ?? 6000; if (!query) throw new Error("Query required: company name, topic, or keyword"); const data = await fetchGdelt(query); return formatArticles(data, query, maxLength); } - src/server.ts:456-476 (registration)Registration of the "extract_gdelt" tool and its execution wrapper.
server.registerTool( "extract_gdelt", { description: "Fetch global news intelligence from the GDELT Project. GDELT monitors broadcast, print, and web news from every country in 100+ languages, updated every 15 minutes. Returns articles with title, source domain, country of origin, language, and publication date — covering news worldwide that Western sources miss. Free, no auth. Pass any company name, topic, or keyword. Unique: not available in any other MCP server.", inputSchema: z.object({ url: z.string().describe("Query: company name, topic, or keyword e.g. 'Palantir', 'artificial intelligence', 'MCP server'"), max_length: z.number().optional().default(6000), }), annotations: { readOnlyHint: true, openWorldHint: true }, }, async ({ url, max_length }) => { try { const result = await gdeltAdapter({ url, maxLength: max_length }); const ctx = stampFreshness(result, { url, maxLength: max_length }, "gdelt"); return { content: [{ type: "text", text: formatForLLM(ctx) }] }; } catch (err) { return { content: [{ type: "text", text: formatSecurityError(err) }] }; } } );