---
summary: search_entities — caller-supplied select missing id/display_name no longer breaks output validation; framework ^0.7.5 adoption (vitest projects shape)
breaking: false
---

# 0.6.4 — 2026-04-27

Bug-fix release for [#11](https://github.com/cyanheads/openalex-mcp-server/issues/11) plus a small framework-adoption pass picked up during the maintenance flow.

## Fixed

- **`openalex_search_entities` — caller-supplied `select` no longer breaks output validation ([#11](https://github.com/cyanheads/openalex-mcp-server/issues/11))** — `translateSelect` in `src/services/openalex/openalex-service.ts` now prepends and dedupes `id` / `display_name` (a new `REQUIRED_SEARCH_FIELDS` invariant) before forwarding to OpenAlex. Previously, a caller passing e.g. `select: ["doi", "title", "publication_year"]` got an upstream 200, but the framework's output Zod schema then rejected the response (`results.0.id: expected string, received undefined`) because OpenAlex projects out exactly the requested fields. The failure ate the full upstream cost (one observed case wasted 369 KB and 1.3 s) before surfacing — and the wire error blamed the response, not the caller's `select`. Both call sites are covered: search/list and singleton id-lookup. The `select` field description tightened to make the invariant explicit: *"Always returned: `id`, `display_name` — additional fields you list are appended."* Added 4 regression tests in `tests/services/openalex/openalex-service.test.ts`.

## Changed

- **`vitest.config.ts` adopted Vitest 4 `projects` shape** — matches the `@cyanheads/mcp-ts-core` 0.7.5 template; positions the suite to split into smoke/integration/fuzz projects as it grows. Current `unit` project includes the existing `src/**/*.test.ts` and `tests/**/*.test.ts` and excludes the named subdirs. No test behavior change today.
