---
summary: "Crash fix for ROR-only funders/affiliations and null date components; content[] now escapes Markdown; JATS <alternatives> formula dedup"
breaking: false
security: false
---

# 0.3.8 — 2026-08-09

## Fixed

- **`crossref_get_work`** no longer throws when a funder or affiliation is asserted through the ROR registry instead of by name, or when a `date-parts` component Crossref records as `null` reaches the projection — both are ordinary Crossref deposits, not corruption. `CrossrefFunder.name` and an affiliation's `name` are now optional; each entry gains a `ror` field carrying the identifier that stands in for the missing name, projected on both `structuredContent` and `content[]`. `parseDateParts` omits an unknown date component instead of relaying it, and stops at the first unknown component rather than reading past it. Sampled live, 3.5% of funding assertions and 2.6% of affiliations carry no name. [#58](https://github.com/cyanheads/crossref-mcp-server/issues/58)
- **`content[]`** — every tool's `format()` now escapes a deposited value on its way into the Markdown line it builds (`mdText`), so a bracket or character reference normalization deliberately kept is no longer consumed a second time by the client's renderer: a kept `<ext-link>` tag no longer loses its address, a doubly-escaped `&amp;lt;` no longer resolves to `<`, and a deposited `*`, `` ` ``, or `~` no longer closes the emphasis `format()` writes around a title. `structuredContent` is unaffected. [#53](https://github.com/cyanheads/crossref-mcp-server/issues/53)
- **`crossref_get_work`**'s abstract line — a deposited value opening with `#`, `>`, `-`, or a number and a dot (e.g. `19. yüzyılın…`) no longer loses that marker to the renderer's heading/quote/list parsing. A second escape entry point, `mdTextAtLineStart`, covers the one line on the surface that places a deposited value at column zero. [#57](https://github.com/cyanheads/crossref-mcp-server/issues/57)
- **JATS `<alternatives>` wrapper** — a formula deposited as more than one encoding (TeX beside presentation MathML) now renders once instead of twice. The first text-bearing child is kept, and the wrapper takes the same outer block boundary a MathML region gets, so a tightly-packed deposit no longer runs the formula into the surrounding prose (`on a time scale$\mathbb{T}$with` → `on a time scale $\mathbb{T}$ with`). [#56](https://github.com/cyanheads/crossref-mcp-server/issues/56)

400 tests pass; `bun run devcheck` and `bun run rebuild` clean.
