---
summary: "Added: openalex_resolve_name resolves identifiers directly; prepaid budget balance. Fixed: search_entities id lookup echoing ignored params, field catalog gaps, an all-digit ROR resolving as neither ROR nor PMID."
breaking: false
security: false
---

# 0.7.7 — 2026-07-26

## Added

- **`openalex_resolve_name` resolves identifiers directly** — an OpenAlex ID, DOI, ORCID, ROR, PMID, PMCID, or ISSN (bare or URL form) now routes to the same deterministic by-ID lookup `openalex_search_entities` uses, instead of relying on autocomplete's accidental external-ID matching. `inferIdentifier()` (`src/services/openalex/openalex-service.ts`) shape-detects the query; `entity_type`/`filters` passed alongside an identifier produce a `notice` rather than being silently dropped, and `display_name` is nullable for the rare untitled record the identifier path can land on. ([#50](https://github.com/cyanheads/openalex-mcp-server/issues/50))
- **`budget.prepaidRemainingUsd`** on all four API-calling tools — the prepaid balance OpenAlex draws on once the daily allowance is spent, which the daily reset does not refill. Rendered as a trailer segment (`+ $4.2000 prepaid`) when the account holds one. ([#60](https://github.com/cyanheads/openalex-mcp-server/issues/60))

## Fixed

- **`openalex_search_entities`'s `id` lookup no longer echoes params it ignores** — `query`, `filters`, `sort`, `sample`, and `seed` passed alongside `id` were rendered in the response `echo` as though they had run, though the singleton endpoint drops all of them. `echo` now shows `entity_type`/`id` alone on that path, and a `notice` names whichever were passed. ([#55](https://github.com/cyanheads/openalex-mcp-server/issues/55))
- **`field-catalog.json` regenerated** — `text.search` was missing from `filter` on 7 of 8 entity types, `is_preprint_repository` from `sources` `filter`/`select`, and `last_known_authorships.institutions.lineage` from `authors` `filter`. `is_preprint_repository` is additionally excluded from `group_by`: it answers HTTP 500 as a group_by target upstream, unlike sibling booleans. ([#56](https://github.com/cyanheads/openalex-mcp-server/issues/56))
- **An all-digit ROR (e.g. Baylor `005781934`) no longer resolves as neither ROR nor PMID** — `normalizeId()`'s bare-ROR branch now keys on the leading zero rather than letter presence, the discriminator that actually separates a ROR from a PMID. ([#62](https://github.com/cyanheads/openalex-mcp-server/issues/62))
