---
summary: "Unified JATS/reference markup strip; refersplit, valueless attributes, MathML duplication, and link-tag address loss fixed"
breaking: false
security: false
---

# 0.3.7 — 2026-08-09

## Fixed

- **`stripReferenceMarkup`** now removes `<refersplit />` as a block separator and no longer half-strips a valueless-attribute element (`<span hidden>`) — a closing tag is removed only if its matching opener was already removed, so `<span hidden>b</span>` survives as a pair instead of shedding just the opener. The attribute-tail regex (`TAG_ATTRIBUTES`) no longer backtracks catastrophically on an unterminated deposit with many attribute pairs, and a link element's closing-tag scan is memoized per name so a field packed with unclosed openers costs one scan instead of one per occurrence. [#52](https://github.com/cyanheads/crossref-mcp-server/issues/52)
- **`stripJats` and `stripReferenceMarkup`** are now one shared implementation (`stripMarkup`) instead of two independently-evolving rules. A MathML formula in a work title or abstract now matches as a region and joins tight instead of shattering into single characters, and a duplicate `<annotation>`/`<annotation-xml>` payload — the same formula's TeX or Content-MathML restatement — is dropped so it renders once. [#54](https://github.com/cyanheads/crossref-mcp-server/issues/54)
- **Link elements** (`a`, `ext-link`, `uri`) on `crossref_get_work` and `crossref_search_works` abstracts are now decided per occurrence instead of always kept: the tag comes out where the element's own text already carries what its `href` holds (verbatim or less the scheme), and stays only where the `href` addresses something the text doesn't name. [#55](https://github.com/cyanheads/crossref-mcp-server/issues/55)

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