# Reported issues for datacite-mcp-server

Pod holds 14 of 14 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 [datacite-mcp-server](/mcp/datacite-mcp-server).

## Most discussed

### bug(datacite_get_citation): other-agency guidance suggests text/x-bibliography whatever format was requested

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 27.0

### Description

On an other-agency miss, `datacite_get_citation` always suggests `Accept: text/x-bibliography`, whatever format was requested. A caller who asked for BibTeX or CSL JSON and follows the guidance gets a formatted citation instead.

### Steps to reproduce

1. Call `datacite_get_citation` with…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/14) · 2026-09-26 · closed · 3 comments

### bug(datacite_get_work): doiUrl is not percent-encoded, so a DOI containing # links to a different DOI

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 27.0

### Description

`datacite_get_work` builds `doiUrl` as `https://doi.org/<doi>` without percent-encoding. In a DOI containing `#` (28,387 DataCite DOIs), everything after the `#` becomes a URL fragment, so the link resolves the shorter DOI, which can be a different record. `%` and `?` are reserved in URLs the same way, and…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/13) · 2026-09-26 · closed · 3 comments

### bug(normalize): a DOI containing a literal percent-escape (%20) is decoded and rejected as invalid_doi

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 27.0

### Description

`normalizeDoi` URI-decodes any DOI that contains `%`, so that `%2F`-encoded input is accepted. DataCite also holds DOIs whose suffix contains a literal percent-escape. Decoding turns `%20` into a space, the result fails the DOI shape check, and a DOI that `datacite_search_works` just returned cannot be…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/12) · 2026-09-26 · closed · 3 comments

### bug(datacite_search_works): lexical query errors return a bare HTTP 400 instead of invalid_query

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

DataCite reports lexical errors (an unterminated quote or `/`) as HTTP 400 with a `token_mgr_error: Lexical error …` title. `isQueryParseError` (`src/services/datacite/datacite-service.ts`) matches only `parse_exception` and `failed to parse`, so these reach the caller as a bare 400 with no `reason` and no recovery. An…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/2) · 2026-09-26 · closed · 3 comments

### bug(datacite_search_works): text or a creator/funder name containing "/" fails with HTTP 400

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Any `text` value containing `/` fails with an upstream HTTP 400, although `text` is documented as never producing a syntax error. `escapeQueryText` (`src/services/datacite/query-builder.ts`, `RESERVED_RE`) escapes `/` as `\/`, but DataCite escapes `/` itself: a raw `/` in `query` succeeds, while a pre-escaped `\/` reproduces…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/1) · 2026-09-26 · closed · 3 comments

### bug(datacite_trace_relations): fails on widely used GBIF datasets because the reverse-relation page is too large

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

26.5.0

### Transport

stdio

### OS

macOS

### Description

`datacite_trace_relations` fails every time on a GBIF dataset DOI that many GBIF downloads cite. The reverse lookup asks `/dois` for 100 records asserting a relation to the root, with `relatedIdentifiers` in `fields[dois]`. Each GBIF download record lists thousands of related identifiers, so that one page is enormous.

Measured…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/15) · 2026-09-26 · closed · 2 comments

### bug(datacite_get_citation): formats DataCite cannot render return an empty success or a bare HTTP 400/500, never format_unavailable

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 27.0

### Description

When DataCite cannot produce a format for a record, it does not answer 204, the status `format_unavailable` is keyed on. It answers 200 with an empty body, 400, or 500. `datacite_get_citation` returns the empty body as a success with `citation: ""`, and the 400 and 500 as bare errors with no reason or…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/11) · 2026-09-26 · closed · 2 comments

### bug(datacite_get_citation): locales tl-PH and hy-AM render APA in US English and override the requested style

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 27.0

### Description

Two locales in the bundled CSL list, `tl-PH` (Tagalog) and `hy-AM` (Armenian), are not supported by DataCite's renderer. DataCite answers them with its default APA en-US rendering, and `datacite_get_citation` returns that text labelled with the requested style and locale, with no notice. The other 61…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/10) · 2026-09-26 · closed · 2 comments

## Most recent

### feat(datacite_trace_relations): find reverse relations asserted through relatedItems

### Use case

`datacite_trace_relations` finds reverse relations with one query, `relatedIdentifiers.relatedIdentifier:"<doi>"`. A record that asserts its relation only in `relatedItems` is never found. About 85,600 records carry a DOI-typed related item and no `relatedIdentifiers` at all (`relatedItems.relatedItemIdentifier.relatedItemIdentifierType:DOI AND NOT _exists_:relatedIdentifiers.relatedIdentifier`).

For `10.83213/entr-gt71`:

| Reverse query | Records |
|---|---|
|…

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

### bug(datacite_trace_relations): non-DataCite-root notice cites Event Data that was not read and calls unregistered DOIs another agency's

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

When DataCite holds no record for the root, the notice always says the edges include, "from Event Data, the DataCite works its own reference list cites", even with `include_event_data: false`, when Event Data was never read. It also opens with "`<doi>` is not a DataCite DOI" for a DOI that no agency registered, so a mistyped…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/9) · 2026-09-26 · closed · 2 comments

### bug(datacite_trace_relations): relation_types misses relations the other side asserts, so HasPart finds no parts

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

`relation_types` matches only the type the edge's `from` record asserted. A part records `IsPartOf <root>`, so `relation_types: ["HasPart"]` sends `relationType:(HasPart)` on the reverse query and drops it. The call then says no relations were found, even though `rootCounts.partCount` is 1. The `relation_types` description…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/6) · 2026-09-26 · closed · 2 comments

### bug(datacite_trace_relations): depth-2 reverse lookup drops records past the remaining node room without disclosure

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

At depth 2, the reverse query for the frontier is sized to the room left under `max_nodes` (`Math.min(maxNodes - nodes.size, 100)` in `src/services/datacite/relation-graph.ts`), and records past that page are never counted in `available`. When the page fits, the call drops the rest with `truncated` unset and no notice.…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/5) · 2026-09-26 · closed · 2 comments

### bug(datacite_search_works): an ORCID URL with a trailing slash is rejected as a bad checksum

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

An ORCID iD URL with a trailing slash is rejected as failing its checksum, although the checksum is valid. The ORCID normaliser (`src/services/datacite/normalize.ts`) strips the `orcid.org/` prefix but not a trailing `/`, so the check digit is read from the wrong character. The ROR normaliser already strips a trailing slash.…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/4) · 2026-09-26 · closed · 2 comments

### bug(datacite_search_works): a cursor walk ending on a full page returns a nextCursor to an empty page

### Server version

0.1.0

### mcp-ts-core version

0.13.8

### Runtime

Node.js

### Runtime version

Node 26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

In a cursor walk whose total is an exact multiple of `limit`, the last full page still returns a `nextCursor`. Following it costs one more call and returns an empty page with no notice. The `nextCursor` description says it is "absent on the last page". DataCite sends a next link whenever a page is full, and the server passes…

[Read the thread](https://github.com/cyanheads/datacite-mcp-server/issues/3) · 2026-09-26 · closed · 2 comments

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