---
summary: "GDELT requests run through the framework's shared outbound pacer with a cooldown gate and queue-wait rejection, and createApp() declares a stateless session posture in src/. Argument rejections carry a recovery hint, and client-added keys or case-style parameter variants are tolerated instead of rejected."
breaking: false
security: false
---

# 0.4.2 — 2026-09-19

## Added

- **`bun run audit:fix`** runs `bun audit fix` directly — the first response to a transitive-advisory `devcheck` flag (mcp-ts-core 0.13.0).
- **`bun run start`** runs the built server directly, alongside the existing `start:stdio`/`start:http`.
- **`devcheck.config.json`** gains an empty `lint: {}` key, ready to carry `lint.truncationAllowlist` (mcp-ts-core 0.13.6) in place of the `MCP_LINT_TRUNCATION_ALLOWLIST` env var.
- **`GDELT_BASE_URL` and `GDELT_REQUEST_DELAY_MS`** are declared as optional `user_config` options in the MCPB manifest and both plugin manifests, wired into `mcp_config`/`env`.
- **`.github/workflows/codeql.yml`** — the one CI workflow this server carries, active while the repo's CodeQL default setup is off.

## Changed

- **GDELT requests now run through the framework's shared outbound pacer** (`createPacer`, mcp-ts-core 0.13.4) in place of the local fixed-interval rate limiter — one request in flight, spaced by `GDELT_REQUEST_DELAY_MS`, behind a cooldown gate that a rate limit from GDELT — an HTTP 429 or an HTTP-200 rate-limit notice — closes for every queued caller: 5s doubling to a 60s ceiling and resetting on the next success. A caller whose projected queue wait exceeds 60s is rejected before any upstream request is spent, under the existing `gdelt_rate_limited` reason with a hint naming the wait; every tool's advertised `gdelt_rate_limited` description now names this second rejection route. The pacer is disposed through `createApp({ teardown })` (mcp-ts-core 0.13.1). ([#44](https://github.com/cyanheads/gdelt-mcp-server/issues/44))
- **`src/index.ts` declares `createApp({ sessionMode: 'stateless' })`** (mcp-ts-core 0.13.1) — an HTTP source run with `MCP_SESSION_MODE` unset now serves stateless instead of resolving `auto` to stateful; an explicitly set `MCP_SESSION_MODE` still overrides it. `GET /mcp` and the `/.well-known/mcp.json` server card report the resolved mode. ([#34](https://github.com/cyanheads/gdelt-mcp-server/issues/34))
- **Tool-argument rejections carry a `Recovery:` line and `data.reason: "invalid_arguments"`** (mcp-ts-core 0.13.3), naming the accepted keys on an unknown key and rendering an omitted required field as missing rather than a wrong choice. A client-added root key is dropped instead of rejecting the call, and a case-style variant of a declared key (`max_records` → `maxRecords`) is rewritten instead of rejected (mcp-ts-core 0.13.4); the advertised `inputSchema` is unchanged either way.
- **Declared tool-error text closes with `(reason <reason>)`**, plus ` · not retryable` when `data.retryable` is false (mcp-ts-core 0.13.5).
- **An empty or whole-value `${…}` `GDELT_BASE_URL` or `GDELT_REQUEST_DELAY_MS` now reads as unset** rather than as a literal value, through `parseEnvConfig` (mcp-ts-core 0.13.0).
- **`SIGTERM`/`SIGINT` now end the process explicitly** (mcp-ts-core 0.13.1).
- Bun engines floor raised to `>=1.4.0` (mcp-ts-core 0.12.9).
- Skill tree moved `skills/` → `framework-skills/`, so a plugin install no longer hands these development skills to the installing agent (mcp-ts-core 0.13.0); `AGENTS.md` added as the byte-identical twin of `CLAUDE.md` and shipped in `files`. Issue forms, `CONTRIBUTING.md`, and `.env.example`'s framework block synced to the current template.
- README restructured into an Overview section plus a per-tool Capability reference.
- Plugin manifests (`.claude-plugin/plugin.json`, `manifest.json`) carry author email/URL and keywords; `.claude-plugin/plugin.json` adds its `$schema`.

## Dependencies

- `@cyanheads/mcp-ts-core` `^0.12.5` → `^0.13.6`
- `zod` `^4.5.4` → `^4.6.5`
- `@biomejs/biome` `^2.5.11` → `^2.5.14`
- `@types/node` `^26.4.0` → `^26.6.1`
- `ignore` `^7.0.7` → `^7.0.9`
- `tsc-alias` `^1.9.2` → `^1.9.5`
- `vitest` `^4.1.11` → `^5.0.1`
