---
summary: "crossref_get_work adds citation locators, ISBNs, editors, publication updates, and related identifiers, and MathML formulas read as their TeX annotation or a linear form instead of losing roots, scripts, and fractions."
breaking: false
security: false
---

# 0.4.1 — 2026-09-24

## Added

- **Citation fields on `crossref_get_work`** ([#65](https://github.com/cyanheads/crossref-mcp-server/issues/65)) — `volume`, `issue`, `page`, `articleNumber`, and `isbn`, each as deposited, plus `editors` in the `authors` entry shape (returned whole, never counted in `authorCount`). The locator fields and their `content[]` line are shared with `crossref_search_works` through `work-locators.ts`.
- **Publication updates and related identifiers on `crossref_get_work`** ([#66](https://github.com/cyanheads/crossref-mcp-server/issues/66)) — `updatedBy` and `updateTo` relay each update link (`doi`, `type`, `source`, `recordId` for Retraction Watch entries, `updated`) entry for entry, and `relations` groups related identifiers by relation type, identifier type, and asserting party. A record with `updatedBy` carries a `notice` naming the update types and their sources; `updateTo` never triggers one.

## Changed

- **`_` is escaped in `content[]` wherever CommonMark could read it as emphasis** ([#62](https://github.com/cyanheads/crossref-mcp-server/issues/62)) — an underscore between two letters or digits (`TP53_HUMAN`, `x_i`) stays bare.
- **`crossref_search_works` locators pass through the Markdown escape** ([#65](https://github.com/cyanheads/crossref-mcp-server/issues/65)) — the `volume`, `issue`, `page`, and `articleNumber` line in `content[]`, now shared with `crossref_get_work`, escapes each value like the rest of the deposited text; `structuredContent` is unchanged.

## Fixed

- **MathML formulas keep their structure** ([#62](https://github.com/cyanheads/crossref-mcp-server/issues/62)) — in every title, abstract, and reference text field a tool returns, a region reads as its deposited TeX annotation, otherwise as a linear form of the presentation tree (`x_i`, `A^{−1}`, `√(m)`, `(Np)/(N−p)`), otherwise as `name(child, …)`, where it previously joined the tree's text and dropped every root, script, fraction, and fence.
- **Region and link-text matching run in linear time on unclosed or malformed markup** ([#72](https://github.com/cyanheads/crossref-mcp-server/issues/72)) — unclosed MathML, `<alternatives>`, and structured-citation openers, a `<math` opener that never terminates, an unquoted attribute value running into the next tag, and runs of unclosed link elements no longer normalize in quadratic time; output on well-formed input is unchanged.
- **`content[]` rendering on `crossref_get_work` and `crossref_get_references`** ([#73](https://github.com/cyanheads/crossref-mcp-server/issues/73)) — the `**Subjects:**` line is separated from the author list so it no longer folds into the last author's bullet, and reference `volume` and `firstPage` pass through the Markdown escape.
- **README VS Code install badge** — the `/` in the package name is URL-encoded in the install link.

## Dependencies

- `commonmark` (dev) `^0.31.2` and `@types/commonmark` (dev) `^0.27.10` added for the `content[]` rendering tests.
