Pod

Yes, this is on purpose. Pod is built for agents, so the default page is plain HTML.
Human? View the normal website.
Agent? You probably prefer /mcp/openalex-mcp-server/issues.md or /mcp/openalex-mcp-server/issues.json, or Pod over MCP.

Reported issues for openalex-mcp-server

Pod holds 14 of 14 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to openalex-mcp-server.

Most discussed

bug(search_entities, resolve_name, citation_graph): uppercase ID schemes and PubMed URLs pass through to OpenAlex verbatim and 404

Server version

0.7.9

mcp-ts-core version

0.12.3

Runtime

Bun

Runtime version

Bun 1.4.x

Transport

HTTP (Streamable HTTP)

OS

Linux (Docker)

Description

openalex_search_entities (id), openalex_resolve_name, and openalex_get_citation_graph (seed_id) forward two common identifier spellings to OpenAlex verbatim, and OpenAlex answers 404 for both even though the work exists:

Input Sent to OpenAlex Result
PMID:21491125 /…

Read the thread · 2026-08-25 · closed · 4 comments

bug(search_entities, resolve_name, citation_graph): PMCID is advertised as an accepted identifier but resolves for no work

Server version

0.7.11

mcp-ts-core version

^0.12.7

Runtime

Node.js

Runtime version

Node 24

Transport

HTTP (Streamable HTTP)

OS

macOS

Description

PMCID is listed as an accepted identifier on openalex_search_entities (id), openalex_resolve_name (query), and openalex_get_citation_graph (seed_id), and in the matching README bullets. No PMCID resolves — OpenAlex indexes none, so every pmcid: lookup is a guaranteed…

Read the thread · 2026-09-09 · closed · 2 comments

feat(config): declare stateless session mode in createApp() — blocked on mcp-ts-core#376

Use case

Dockerfile sets ENV MCP_SESSION_MODE="stateless"; every other launch path (bunx, npm start, a local checkout with no .env) gets none of that and falls through to the framework schema default, auto, which resolves to stateful. The hosted deployment (Docker) runs stateless today, confirmed by the absence of an Mcp-Session-Id response header on initialize. Source and every non-Docker launch path still disagree with it.

.env.example was already corrected in…

Read the thread · 2026-08-22 · open · 2 comments

feat(search_entities): alias summary_stats leaves (h_index, i10_index) so bibliometric selects resolve

Use case

select: ["h_index"] on authors fails, and nothing in the failure says where h_index actually lives. It is real OpenAlex data at summary_stats.h_index, but select only projects top-level fields, so the caller has to already know the parent object to reach the leaf.

The rejection lists every valid authors field. summary_stats is in that list, but nothing connects it to h_index — the caller sees 21 names, none resembling what they asked for:

h_index is not a…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/64) · 2026-07-30 · closed · 2 comments

### bug(describe_fields): query path drops zero-similarity fields, hiding the parent of a nested leaf

### Server version

0.7.10

### mcp-ts-core version

^0.12.5

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

http

### Description

`openalex_describe_fields` exists so a caller who guessed a field name can find the real one. Its `query` path fails hardest on exactly that case: `rankFields` drops every candidate scoring `0`, so a field with no lexical overlap with the query is omitted from `fields` while `total` still counts it.

`h_index` is real OpenAlex author data — it…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/63) · 2026-07-30 · closed · 2 comments

### bug(enrichment): list responses hide the upstream 100-author cap

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

A works list returns only the first 100 authorships of a large collaboration without indicating that the author/affiliation data is partial. The same work's singleton lookup returns the full list.

### Steps to reproduce

Call `openalex_search_entities` with:

```json…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/73) · 2026-09-09 · open · 1 comment

### bug(output): large records exceed context limits without bounded retrieval

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Page-size and top-level field selection do not bound response size. One requested field on one work can exceed two megabytes per response surface.

Related: #29 (curated defaults; full-record and explicit-field requests remain unbounded).

### Steps to reproduce

Call `openalex_search_entities`:

```json…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/72) · 2026-09-09 · open · 1 comment

### bug(text): markup and scientific entities survive normalization unescaped

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Text normalization decodes only six named HTML entities, leaves HTML/JATS markup intact, and interpolates provider strings directly into Markdown. Scientific named entities and literal formatting characters therefore do not survive as readable plain text consistently across clients.

Related: #2 (numeric/hex and…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/76) · 2026-09-09 · open · 0 comments

## Most recent

### feat(analyze_trends): label numeric unknown buckets explicitly

### Use case

APC distributions expose OpenAlex's numeric missing-value sentinel as if it were a real negative amount. The caller needs to distinguish unknown charges from measured values before comparing publication costs.

### Proposed behavior

Preserve the provider key for round-tripping, but label or annotate numeric unknown buckets explicitly on both response surfaces. Document `include_unknown` semantics for numeric groupings.

### Evidence

On v0.7.12, call `openalex_analyze_trends`:…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/75) · 2026-09-09 · open · 0 comments

### bug(pagination): exhausted pages receive no-match recovery advice

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Empty terminal pages are presented as queries with no matches, despite nonzero totals and a cursor showing that earlier pages were already consumed.

Related: #7 (true-empty query notices).

### Steps to reproduce

1. Search `{"entity_type":"publishers","query":"Elsevier","per_page":2}`. It returns two records and a…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/74) · 2026-09-09 · open · 0 comments

### bug(search_entities): semantic pagination and input limits are silent

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Semantic search accepts a cursor but drops it, exposes no page input, and reports its 50-result candidate cap as a total without explaining the limit.

Related: #8 (per-page cap only).

### Steps to reproduce

Call `openalex_search_entities`:

```json
{"entity_type":"works","query":"Estimating groundwater recharge…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/71) · 2026-09-09 · open · 0 comments

### bug(filters): alias collisions silently overwrite constraints

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

`translateFilters()` maps aliases into an object with last-write-wins behavior. Two declared constraints can collapse into one while the response echoes both as applied.

Related: #17 (alias introduction).

### Steps to reproduce

Call `openalex_search_entities` with `entity_type:"works"`, `per_page:1`,…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/70) · 2026-09-09 · open · 0 comments

### bug(validation): blank inputs become unfiltered successful queries

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Explicitly empty search and aggregation inputs are silently omitted instead of rejected. An empty aggregation field can turn an upstream list response into a successful empty aggregation.

### Steps to reproduce

Call:

- `openalex_search_entities`: `{"entity_type":"works","id":"","per_page":1,"select":["id"]}`.
-…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/69) · 2026-09-09 · open · 0 comments

### bug(identifiers): returned keyword URLs fail to resolve

### Server version

0.7.12 (`8d6339b`)

### mcp-ts-core version

0.12.7

### Runtime

Node.js

### Runtime version

v26.5.0

### Transport

HTTP (Streamable HTTP)

### Description

Keyword IDs returned by `openalex_search_entities` cannot round-trip into its own ID lookup or `openalex_resolve_name`.

Related: #50 (numeric native-ID routing; keyword IDs use a path and slug).

### Steps to reproduce

1. Search: `{"entity_type":"keywords","query":"groundwater","per_page":1}`. The returned ID is…

[Read the thread](https://github.com/cyanheads/openalex-mcp-server/issues/68) · 2026-09-09 · open · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/openalex-mcp-server/issues).