# Reported issues for guardian-mcp-server

Pod holds 7 of 7 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [guardian-mcp-server](/mcp/guardian-mcp-server).

## Most discussed

### feat(guardian_browse): expose /editions as a browse mode

### Use case

`guardian_browse` has discovery modes for sections (`list_sections`) and tags (`list_tags`), but
nothing surfaces the Guardian's regional editions (UK, US, Australia, Europe, International). A
caller who wants to know which editions exist has no way to ask the server.

### Proposed behavior

Add a `list_editions` mode to `guardian_browse` that calls the Guardian [`/editions`
endpoint](https://open-platform.theguardian.com/documentation/editions) and returns the fixed list
of Guardi

[Read the thread](https://github.com/cyanheads/guardian-mcp-server/issues/3) · 2026-06-03 · closed · 1 comment

### feat(guardian_search): support OR logic for tag filters

The `guardian_search` `tag` parameter currently applies AND logic when multiple tag IDs are provided (comma-separated). The [Guardian Open Platform API](https://open-platform.theguardian.com/documentation/search) natively supports OR logic by joining tag IDs with `|`, but the tool has no way to express this — every multi-tag query is implicitly AND.

## Proposal

Expose OR semantics for tag filtering in `guardian_search` by supporting `|`-delimited tag IDs that get forwarded verbatim to the upst

[Read the thread](https://github.com/cyanheads/guardian-mcp-server/issues/2) · 2026-06-03 · closed · 1 comment

### feat(config): default MCP_SESSION_MODE to stateless across env, Docker, and src

`Dockerfile` sets `ENV MCP_SESSION_MODE="stateless"`, but `.env.example` carries a commented `# MCP_SESSION_MODE=stateful`, whose comment documents the value set as `stateful | stateless (default: stateful)`. The container and the same code run via `bunx`, `npm start`, or from source therefore resolve to different session modes — stateless in Docker, stateful everywhere else, since the framework schema defaults to `auto` and `auto` resolves to `stateful`.

Related: cyanheads/mcp-ts-core#376

## 

[Read the thread](https://github.com/cyanheads/guardian-mcp-server/issues/9) · 2026-08-22 · open · 0 comments

### test(errors): no coverage for recovery-hint wiring (ctx.recoveryFor)

Concrete statement of what's currently missing: `guardian_search` and `guardian_browse` declare `errors[]` contracts with `recovery` text, and their handlers pass `ctx.recoveryFor(reason)` into every `ctx.fail(...)` call so the hint reaches `data.recovery.hint` on the wire. `annotateHttpError` in `src/services/guardian/guardian-service.ts` does the same for the service-level HTTP failures (`unauthorized`, `not_found`, `section_not_found`, `api_error`). None of this is covered by a test — the tes

[Read the thread](https://github.com/cyanheads/guardian-mcp-server/issues/7) · 2026-08-21 · open · 0 comments

### bug(tools): truncated:false is implied, never stated, in content[] output

### Server version

0.1.2

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

streamable-http

### Description

All three tools declare `truncated: boolean` in their output schema, but `format()` only mentions truncation when it is true (a truncation note) or when `body` is absent (`**Truncated:** ...` line). A body-present, non-truncated result renders no truncation marker at all, so `structuredContent.truncated: false` has no mirror in `content[]`

[Read the thread](https://github.com/cyanheads/guardian-mcp-server/issues/6) · 2026-08-21 · open · 0 comments

### bug(service): upstream URL leaks into client-facing error messages

### Server version

0.1.2

### mcp-ts-core version

0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio + streamable-http

### Description

When the Guardian API returns a non-OK status, the error message clients see is the raw fetch failure — internal host and path included — instead of the authored per-reason message declared in each tool's `errors[]` contract.

`annotateHttpError` in `src/services/guardian/guardian-service.ts` rethrows with `redactApiKey(err.message

[Read the thread](https://github.com/cyanheads/guardian-mcp-server/issues/5) · 2026-08-21 · open · 0 comments

### feat(tool-surface): rename search and browse tools

### Use case

`guardian_search` and `guardian_browse` omit the object of each operation. The server also exposes
`guardian_get_article`, so adding explicit objects makes the three-tool surface easier to
distinguish from a `tools/list` call alone, without any other context.

### Proposed behavior

Rename both tools directly:

| Current | New | Role |
|:---|:---|:---|
| `guardian_search` | `guardian_search_articles` | Full-text article search with section, tag, contributor, and date filters |
| `g

[Read the thread](https://github.com/cyanheads/guardian-mcp-server/issues/4) · 2026-07-21 · open · 0 comments

## Most recent

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/guardian-mcp-server/issues).
