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.