Pod

Available as Markdown and JSON. Pod is also available over MCP. View the styled page.

Reported issues for pubmed-mcp-server

Pod holds 16 of 16 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to pubmed-mcp-server.

Most discussed

bug(fetch_fulltext): mixed-citation glues italic journal title to bold volume number

Server version

2.10.7

mcp-ts-core version

0.12.7

Runtime

Bun

Runtime version

1.4.0

Transport

HTTP (Streamable HTTP)

Description

In pubmed_fetch_fulltext with includeReferences: true, a JATS mixed-citation whose italic journal title is immediately followed by a bold volume number (no text node between them) renders the two glued together on both output surfaces, e.g. Nat. Methods16, 603–606 (2019).

Related: #115 (same zero-separator flattening, but for…

Read the thread · 2026-09-09 · closed · 1 comment

bug(fetch_fulltext): unavailable reason skips over an unconfigured tier, hiding an incomplete search

Server version

2.10.5

mcp-ts-core version

0.12.7

Runtime

Bun

Runtime version

Bun 1.4.x

Transport

stdio

Description

pubmed_fetch_fulltext's reasonFromChain (src/mcp-server/tools/definitions/fetch-fulltext.tool.ts) derives an unavailable entry's top-level reason from the last chain entry whose outcome isn't not-attempted, skipping over any tiers the deployment never tried:

function reasonFromChain(chain) {
  let lastSignal;
  for (const t of…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/110) · 2026-09-09 · closed · 1 comment

### bug(format_citations): invalid format value collapses to a generic union error, hiding accepted values

### Server version

2.10.5

### mcp-ts-core version

0.12.7

### Runtime

Bun

### Runtime version

Bun 1.4.x

### Transport

stdio

### Description

`pubmed_format_citations` accepts `format` as a Zod union — a bare `CitationStyleEnum` or an array of it (`src/mcp-server/tools/definitions/format-citations.tool.ts`):

```ts
format: z
  .union([
    CitationStyleEnum.describe('Single citation style. One of: apa, mla, bibtex, ris, vancouver.'),
    z.array(CitationStyleEnum).min(1).describe(…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/109) · 2026-09-09 · closed · 1 comment

### bug(spell_check): all-numeric query is coerced to a number by the XML parser and fails output validation

### Server version

2.10.4

### mcp-ts-core version

^0.12.3

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

http

### Description

`NcbiService.eSpell` (`src/services/ncbi/ncbi-service.ts`) reads `Query` / `CorrectedQuery` from `NcbiResponseHandler`'s default `xmlParser`, which is configured with `parseTagValue: true`. For an all-numeric term — a PMID pasted into the spell checker is the common case — `<Query>33306283</Query>` parses to the number `33306283` before any…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/108) · 2026-08-22 · closed · 1 comment

### bug(fetch_fulltext): HTML served at Unpaywall's url_for_pdf is parsed as a PDF, so the landing-page fallback never runs

### Server version

2.10.5 (also present at 2.10.2, when this was filed)

### mcp-ts-core version

0.12.7 (also present at 0.12.3, when this was filed)

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable)

### Description

When [Unpaywall](https://unpaywall.org/) reports a `url_for_pdf` that the publisher answers with an HTML paywall or interstitial page — `200 OK`, `content-type: text/html` — `pubmed_fetch_fulltext` hands those HTML bytes to the PDF parser. The…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/104) · 2026-08-21 · closed · 1 comment

### bug(find_related): all-provider failure returns an empty success

### Server version

2.10.5

### mcp-ts-core version

^0.12.7

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.x

### Description

`pubmed_find_related` converts a complete provider outage into a successful empty result. When NCBI fails and every other eligible fallback also fails, the handler's `providerResult === null` branch returns `articles: []` with an invented `source: "ncbi"` and `totalCount: 0` — callers cannot distinguish…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/103) · 2026-08-11 · closed · 1 comment

### bug(europepmc): title markup leaks into both output surfaces

### Server version

2.10.2

### mcp-ts-core version

^0.11.0

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

Europe PMC's `title`, `authors` (`authorString`), and `journal` (`journalTitle`) fields are passed straight through from the upstream JSON to both `structuredContent` and the Markdown `content[]` render, in `pubmed_europepmc_fetch` and `pubmed_europepmc_search` alike. `abstractText` goes through…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/102) · 2026-08-11 · closed · 1 comment

### bug(find_related): Europe PMC fallback can return false-empty pages

### Server version

2.10.5

### mcp-ts-core version

^0.12.7

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.x

### Description

`pubmed_find_related`'s Europe PMC fallback (`epmcProvider()` in `src/mcp-server/tools/definitions/find-related.tool.ts`) reports Europe PMC's raw `hitCount` as the tool's `totalFound`, but `EuropePmcService.citations()`/`references()` (`src/services/europe-pmc/europe-pmc-service.ts`) silently drop link…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/101) · 2026-08-11 · closed · 1 comment

## Most recent

### enhancement(lookup_citation): duplicate keys render identical headings in content[]

### Server version

2.10.7

### mcp-ts-core version

0.12.7

### Runtime

Bun

### Runtime version

1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

When two `pubmed_lookup_citation` inputs share a `key`, the results are correct and distinct in `structuredContent`, but the `content[]` markdown renders each under an identical `### <key>` heading, so a reader of the text surface cannot tell which result belongs to which submitted citation.

### Steps to reproduce

1. Call…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/128) · 2026-09-09 · open · 0 comments

### bug(fetch_fulltext): Europe PMC XML parser coerces numeric text, unlike the PMC path

### Server version

2.10.7

### mcp-ts-core version

0.12.7

### Runtime

Bun

### Runtime version

1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

The Europe PMC full-text parser is built with `parseTagValue: true`, under a comment saying its config "mirrors `NcbiResponseHandler.orderedXmlParser`". The NCBI parser sets `parseTagValue: false` specifically so bibliographic tokens stay verbatim (page ranges like `4002.e26`, zero-padded pages). On the Europe PMC path,…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/127) · 2026-09-09 · open · 0 comments

### bug(fetch_fulltext): sections filter matches top-level titles only and does not say so

### Server version

2.10.7

### mcp-ts-core version

0.12.7

### Runtime

Bun

### Runtime version

1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`pubmed_fetch_fulltext`'s `sections` filter matches top-level section titles only. Its description says "Filter to specific sections by title" with no scope qualifier, while the sibling `maxSections` says "Maximum top-level body sections". A caller who names a subsection title gets zero sections and the filter-miss notice, with…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/126) · 2026-09-09 · open · 0 comments

### bug(lookup_citation): a key containing "|" turns a matched citation into not_found

### Server version

2.10.7

### mcp-ts-core version

0.12.7

### Runtime

Bun

### Runtime version

1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`pubmed_lookup_citation` accepts any string as a citation `key`, but the key is embedded verbatim into the pipe-delimited `bdata` line sent to NCBI ECitMatch. A key containing `|` shifts the field layout of that line, so NCBI's echoed response no longer reconciles to the submitted citation and a citation NCBI matched comes back as…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/125) · 2026-09-09 · open · 0 comments

### bug(fetch_fulltext): mixed-citation glues surname to given names inside <name>

### Server version

2.10.7

### mcp-ts-core version

0.12.8

### Runtime

Bun

### Runtime version

1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

In `pubmed_fetch_fulltext` with `includeReferences: true`, a JATS `mixed-citation` author written as `<name><surname>…</surname><given-names>…</given-names></name>` with no text between the two parts renders the surname glued to the initials, e.g. `NybakkenJW Marine Biology: An Ecological Approach, 4th ed.; …`.

Related: #115, #123…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/124) · 2026-09-09 · open · 0 comments

### bug(search_articles): blank queries retry as an NCBI outage

### Server version

2.10.7

### mcp-ts-core version

0.12.7

### Runtime

Bun

### Runtime version

1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

A whitespace-only PubMed query passes validation, becomes an empty upstream term, and is retried as a service outage. The resulting recovery hint asks the caller to retry instead of correcting the query.

### Steps to reproduce

Call `pubmed_search_articles` with `{"query":"   ","maxResults":2}`.

### Actual behavior

With the default…

[Read the thread](https://github.com/cyanheads/pubmed-mcp-server/issues/122) · 2026-09-09 · open · 0 comments

### feat(fetch_fulltext): add a true response-wide budget

Related: #81

## Use case

The character controls added in #81 bound body text only, not the complete `pubmed_fetch_fulltext` response. Callers can set a small `maxCharacters` and still receive a much larger payload from the abstract, references, metadata, and additional articles.

Field-tested on v2.10.6 over the same DOI the original report used:

```json
{
  "dois": ["10.1093/nar/gks1195"],
  "maxCharacters": 1000,
  "includeReferences": true
}

The body was correctly capped to 1,000 of…

Read the thread · 2026-08-11 · closed · 1 comment

feat(fetch_articles): bound large batch responses

Use case

pubmed_fetch_articles accepts up to 200 PMIDs and returns complete metadata for every resolved article, but it has no response budget or continuation signal. A normal batch can exceed an MCP client's context window before the caller has a chance to split it.

Confirmed on 2.10.6 (HEAD) by reading src/mcp-server/tools/definitions/fetch-articles.tool.ts in full: the handler has no maxCharacters/budget input, no truncated/nextOffset/remainingPmids output, and no size…

Read the thread · 2026-08-11 · closed · 1 comment

The remaining reports are on the project's issue tracker.