Skip to content

guardian mcp server changelog

io.github.cyanheads/guardian-mcp-server

5 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.

  • server.json 1 field changed
    version
    0.2.0 0.3.0

  • server.json 1 field changed
    version
    0.1.5 0.2.0
  • AGENTS.md +11 −10

    https://raw.githubusercontent.com/cyanheads/guardian-mcp-server/HEAD/AGENTS.md

    − **Version:** 0.1.5− **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `0.13.13`− **MCP SDK:** `@modelcontextprotocol/server` ^2.2.0− **Zod:** ^4.6.5− export const guardianSearch = tool('guardian_search', {− In this server, `GuardianService`'s `annotateHttpError` raises `unauthorized`, `api_error`, and the not-found reason each call site hands it (`not_found`, `section_not_found`) — every tool declaring one of those marks it `thrownBy: 'service'`. A reason the handler throws itself with a literal `ctx.fail('<reason>'` stays unmarked.−       guardian-search.tool.ts           # guardian_search−       guardian-browse.tool.ts           # guardian_browse− | Files | kebab-case with suffix | `guardian-search.tool.ts` |− | Tool/resource/prompt names | snake_case | `guardian_search` |+ **Version:** 0.2.0+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.15`+ **MCP SDK:** `@modelcontextprotocol/server` ^2.3.1+ **Zod:** ^4.6.7+ export const guardianSearchArticles = tool('guardian_search_articles', {+ In this server, `GuardianService`'s `annotateHttpError` preserves HTTP-specific codes and emits authored Guardian messages with canonical `status`/`body` diagnostics and explicit retryability. Deterministic failures carry parameter/configuration recovery; 408/425/429 and retryable 5xx retain transient guidance, while 501 is nonretryable. The tool contracts declare each service reason inline with `thrownBy: 'service'`; contracts fill recovery only, not retryability. Article and section 404 retain+ Search and article-returning browse modes cap bodies at 2,000 words and render each article's explicit `truncated` state. `guardian_get_article` accepts `article_id` and returns complete HTML-stripped text without a word cap. Calendar-date bounds are validated locally; tag boolean expressions pass through unchanged and are comma-joined with contributor filters.+       guardian-search-articles.tool.ts           # guardian_search_articles+       guardian-browse-content.tool.ts           # guardian_browse_content+ | Files | kebab-case with suffix | `guardian-search-articles.tool.ts` |+ | Tool/resource/prompt names | snake_case | `guardian_search_articles` |

  • AGENTS.md +9 −8

    https://raw.githubusercontent.com/cyanheads/guardian-mcp-server/HEAD/AGENTS.md

    − **Version:** 0.1.4− **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.6`− **MCP SDK:** `@modelcontextprotocol/server` ^2.0.0− | `ctx.state` | Tenant-scoped KV — `.get(key)`, `.set(key, value, { ttl? })`, `.delete(key)`, `.getMany(keys)`, `.list(prefix, { cursor, limit })`. Accepts any serializable value. |− | `ctx.inputs` | Reader over a retried request's responses — `.accepted(key, schema)`, `.view(key)`, `.state()`, `.dropped`. Empty on the first round. |− | `ctx.requestId` | Unique request ID. |− **Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable?, severity?, thrownBy? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required (≥ 5 words, lint-validated) — the single source of truth for the agent's next move. Pass `ctx.recoveryFor('reaso− **Every release goes through a release PR, straight-through** — `git-wrapup`'s "Release PR mode", mode `straight-through`. One run: `git-wrapup` lands the commit stack on `release/<version>`, pushes it, and opens the PR (title = the release commit subject, body = the changelog entry plus a gates section); `release-and-publish` then fast-forwards `main` locally with `git merge --ff-only`, creates the tag on `main`'s tip, pushes `main` and the tag, deletes the branch, and publishes. A caller's bri+ **Version:** 0.1.5+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `0.13.13`+ **MCP SDK:** `@modelcontextprotocol/server` ^2.2.0+ | `ctx.state` | Tenant-scoped KV — `.get(key)`, `.set(key, value, { ttl? })`, `.delete(key)`, `.getMany(keys)`, `.list(prefix, { cursor, limit })`. Accepts any JSON-serializable value; reads return its JSON form (a `Date` comes back as an ISO string). |+ | `ctx.inputs` | The request's responses — `.accepted(key, schema)`, `.view(key)`, `.state()`, `.dropped` — limited to what the client declared (`elicitation` and its form/url modes, `sampling`, `roots`). Client-supplied: a consent gate trusts only a `ctx.state` record it stored when it asked, bound to the operation, caller, and target (see the `api-context` skill). |+ | `ctx.clientCapabilities` | What the client declared for this request, `undefined` when no view exists. Decides whether to ask for optional context (e.g. roots); never a reason to skip a consent prompt. |+ | `ctx.requestId` | Request ID — the one every log record of the call carries and its error envelope returns as `data.requestId`. |+ **Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable?, severity?, thrownBy? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required (≥ 5 words, lint-validated) — the single source of truth for the agent's next move. The framework puts it on the+ **Every release goes through a release PR, straight-through** — `git-wrapup`'s "Release PR mode", mode `straight-through`. One run: `git-wrapup` lands the commit stack on `release/<version>`, pushes it, and opens the PR (title = the release commit subject, body = the release digest: theme line, `## Changes`, `## Gates`, changelog link last); `release-and-publish` then fast-forwards `main` locally with `git merge --ff-only`, creates the tag on `main`'s tip, pushes `main` and the tag, deletes the 

  • server.json 2 fields changed
    description
    Guardian Open Platform — search and retrieve full article text from The Guardian archive. Guardian Open Platform: search and retrieve full article text from The Guardian archive.
    version
    0.1.4 0.1.5