@cyanheads/openalex-mcp-server 0.7.12 → 0.7.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** openalex-mcp-server
4
- **Version:** 0.7.12
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.12.7`
6
- **Engines:** Bun ≥1.3.0, Node ≥24.0.0
4
+ **Version:** 0.7.13
5
+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.0`
6
+ **Engines:** Bun ≥1.4.0, Node ≥24.0.0
7
7
  **MCP SDK:** `@modelcontextprotocol/server` ^2.0.0
8
- **Zod:** ^4.5.4
8
+ **Zod:** ^4.6.1
9
9
 
10
10
  > **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
11
11
 
@@ -234,9 +234,9 @@ src/
234
234
 
235
235
  ## Skills
236
236
 
237
- Skills are modular instructions in `skills/` at the project root. Read them directly when a task matches — e.g., `skills/add-tool/SKILL.md` when adding a tool.
237
+ Skills are modular instructions in `framework-skills/` at the project root. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool.
238
238
 
239
- **Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). This makes skills available as context without needing to reference `skills/` paths manually. After framework updates, run the `maintenance` skill — it re-syncs the agent directory automatically (Phase B).
239
+ **Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). This makes skills available as context without needing to reference `framework-skills/` paths manually. After framework updates, run the `maintenance` skill — it re-syncs the agent directory automatically (Phase B).
240
240
 
241
241
  Available skills:
242
242
 
@@ -256,8 +256,9 @@ Available skills:
256
256
  | `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
257
257
  | `techniques` | Reusable response/data-shaping patterns — overflow handling, payload shaping, retrieval |
258
258
  | `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
259
- | `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
260
- | `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
259
+ | `git-wrapup` | Prepare the version, changelog, verification, and commit stack. |
260
+ | `release-pr-review` | Review an open release PR when the project opts into release PR mode. |
261
+ | `release-and-publish` | Tag + push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup`. |
261
262
  | `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
262
263
  | `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
263
264
  | `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` |
@@ -275,7 +276,7 @@ Available skills:
275
276
  | `api-workers` | Cloudflare Workers runtime |
276
277
  | `api-mirror` | MirrorService: persistent local SQLite mirror of a bulk upstream dataset — Tier 3 opt-in |
277
278
 
278
- **Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
279
+ **Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `framework-skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
279
280
 
280
281
  When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
281
282
 
@@ -289,7 +290,8 @@ When you complete a skill's checklist, check the boxes and add a completion time
289
290
  | `bun run rebuild` | Clean + build |
290
291
  | `bun run clean` | Remove build artifacts |
291
292
  | `bun run devcheck` | Lint + format + typecheck + security + changelog sync |
292
- | `bun run audit:refresh` | Delete `bun.lock`, reinstall, re-audit. Use when `devcheck` flags a transitive advisory — stale lockfile can mask already-patched deps. If advisory survives, it's real. |
293
+ | `bun run audit:fix` | Run `bun audit fix` to upgrade vulnerable packages within existing ranges. |
294
+ | `bun run audit:refresh` | Delete `bun.lock` and reinstall; last resort after `audit:fix`, targeted updates, and `bun dedupe`. |
293
295
  | `bun run tree` | Generate directory structure doc |
294
296
  | `bun run format` | Auto-fix formatting |
295
297
  | `bun run lint:mcp` | Validate MCP tool/prompt definitions |
@@ -309,6 +311,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
309
311
  `bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. MCPB is stdio-only — HTTP deployments are unaffected. Consumers who don't need it can delete `manifest.json` and `.mcpbignore`; `lint:packaging` skips cleanly.
310
312
 
311
313
  **Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
314
+ Every bundle option must be wired as `${user_config.<option>}`; optional strings need a default. Claude plugins use the same options under `userConfig`, while Codex forwards user variables through `env_vars`. Never overwrite a user's exported value with an empty plugin `env` entry.
312
315
 
313
316
  ---
314
317
 
@@ -361,7 +364,7 @@ import { getOpenAlexService } from '@/services/openalex/openalex-service.js';
361
364
  - [ ] OpenAlex wrapping: tests include at least one sparse payload case with omitted upstream fields
362
365
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
363
366
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
364
- - [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
365
- - [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
366
- - [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
367
+ - [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = the unscoped repo name; `interface.shortDescription` from `package.json` description
368
+ - [ ] `.codex-plugin/mcp.json` updated — server name key is the unscoped repo name; user-supplied variables are listed in `env_vars`
369
+ - [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry keyed by the unscoped repo name; user-supplied variables are declared under `userConfig` and referenced as `${user_config.<option>}`
367
370
  - [ ] `bun run devcheck` passes
package/CLAUDE.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** openalex-mcp-server
4
- **Version:** 0.7.12
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.12.7`
6
- **Engines:** Bun ≥1.3.0, Node ≥24.0.0
4
+ **Version:** 0.7.13
5
+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.0`
6
+ **Engines:** Bun ≥1.4.0, Node ≥24.0.0
7
7
  **MCP SDK:** `@modelcontextprotocol/server` ^2.0.0
8
- **Zod:** ^4.5.4
8
+ **Zod:** ^4.6.1
9
9
 
10
10
  > **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
11
11
 
@@ -234,9 +234,9 @@ src/
234
234
 
235
235
  ## Skills
236
236
 
237
- Skills are modular instructions in `skills/` at the project root. Read them directly when a task matches — e.g., `skills/add-tool/SKILL.md` when adding a tool.
237
+ Skills are modular instructions in `framework-skills/` at the project root. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool.
238
238
 
239
- **Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). This makes skills available as context without needing to reference `skills/` paths manually. After framework updates, run the `maintenance` skill — it re-syncs the agent directory automatically (Phase B).
239
+ **Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). This makes skills available as context without needing to reference `framework-skills/` paths manually. After framework updates, run the `maintenance` skill — it re-syncs the agent directory automatically (Phase B).
240
240
 
241
241
  Available skills:
242
242
 
@@ -256,8 +256,9 @@ Available skills:
256
256
  | `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
257
257
  | `techniques` | Reusable response/data-shaping patterns — overflow handling, payload shaping, retrieval |
258
258
  | `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
259
- | `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
260
- | `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
259
+ | `git-wrapup` | Prepare the version, changelog, verification, and commit stack. |
260
+ | `release-pr-review` | Review an open release PR when the project opts into release PR mode. |
261
+ | `release-and-publish` | Tag + push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup`. |
261
262
  | `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
262
263
  | `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
263
264
  | `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` |
@@ -275,7 +276,7 @@ Available skills:
275
276
  | `api-workers` | Cloudflare Workers runtime |
276
277
  | `api-mirror` | MirrorService: persistent local SQLite mirror of a bulk upstream dataset — Tier 3 opt-in |
277
278
 
278
- **Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
279
+ **Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `framework-skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
279
280
 
280
281
  When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
281
282
 
@@ -289,7 +290,8 @@ When you complete a skill's checklist, check the boxes and add a completion time
289
290
  | `bun run rebuild` | Clean + build |
290
291
  | `bun run clean` | Remove build artifacts |
291
292
  | `bun run devcheck` | Lint + format + typecheck + security + changelog sync |
292
- | `bun run audit:refresh` | Delete `bun.lock`, reinstall, re-audit. Use when `devcheck` flags a transitive advisory — stale lockfile can mask already-patched deps. If advisory survives, it's real. |
293
+ | `bun run audit:fix` | Run `bun audit fix` to upgrade vulnerable packages within existing ranges. |
294
+ | `bun run audit:refresh` | Delete `bun.lock` and reinstall; last resort after `audit:fix`, targeted updates, and `bun dedupe`. |
293
295
  | `bun run tree` | Generate directory structure doc |
294
296
  | `bun run format` | Auto-fix formatting |
295
297
  | `bun run lint:mcp` | Validate MCP tool/prompt definitions |
@@ -309,6 +311,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
309
311
  `bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. MCPB is stdio-only — HTTP deployments are unaffected. Consumers who don't need it can delete `manifest.json` and `.mcpbignore`; `lint:packaging` skips cleanly.
310
312
 
311
313
  **Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
314
+ Every bundle option must be wired as `${user_config.<option>}`; optional strings need a default. Claude plugins use the same options under `userConfig`, while Codex forwards user variables through `env_vars`. Never overwrite a user's exported value with an empty plugin `env` entry.
312
315
 
313
316
  ---
314
317
 
@@ -361,7 +364,7 @@ import { getOpenAlexService } from '@/services/openalex/openalex-service.js';
361
364
  - [ ] OpenAlex wrapping: tests include at least one sparse payload case with omitted upstream fields
362
365
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
363
366
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
364
- - [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
365
- - [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
366
- - [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
367
+ - [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = the unscoped repo name; `interface.shortDescription` from `package.json` description
368
+ - [ ] `.codex-plugin/mcp.json` updated — server name key is the unscoped repo name; user-supplied variables are listed in `env_vars`
369
+ - [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry keyed by the unscoped repo name; user-supplied variables are declared under `userConfig` and referenced as `${user_config.<option>}`
367
370
  - [ ] `bun run devcheck` passes
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.7.12-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/openalex-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.0.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/openalex-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/openalex-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.7.13-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/openalex-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.0.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/openalex-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/openalex-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.0-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -165,7 +165,7 @@ Add to your MCP client config (e.g., `claude_desktop_config.json`):
165
165
 
166
166
  ### Prerequisites
167
167
 
168
- - [Bun v1.3.0](https://bun.sh/) or higher (for development)
168
+ - [Bun v1.4.0](https://bun.sh/) or higher (for development)
169
169
 
170
170
  ### Installation
171
171
 
@@ -243,7 +243,7 @@ See [`CLAUDE.md`](./CLAUDE.md) for development guidelines and architectural rule
243
243
 
244
244
  ## Contributing
245
245
 
246
- Issues and pull requests are welcome. Run checks before submitting:
246
+ Issues are welcome. Run checks before submitting:
247
247
 
248
248
  ```sh
249
249
  bun run devcheck
@@ -0,0 +1,22 @@
1
+ ---
2
+ summary: "Framework adoption and plugin configuration"
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.7.13 — 2026-09-13
8
+
9
+ ## Changed
10
+
11
+ - **Plugin configuration** now exposes the OpenAlex API key, mailto, base URL, and log level through Claude Code user settings and Codex environment forwarding; the MCPB manifest wires the same options into its server environment.
12
+ - **HTTP links** no longer duplicate the trailing slash in `MCP_PUBLIC_URL`, and the landing-page curl example uses a compatible initialization handshake (framework fixes from 0.12.8 and 0.12.9).
13
+ - **Environment parsing** treats empty strings and whole-value `${…}` placeholders as unset, so optional OpenAlex settings remain absent and defaulted settings use their schema defaults.
14
+ - **Framework skills and maintenance tooling** now use the `framework-skills/` layout and current scaffold checks, packaging validation, issue forms, and contributor guidance; development requires Bun 1.4.0 or newer.
15
+
16
+ ## Dependencies
17
+
18
+ - `@cyanheads/mcp-ts-core` ^0.12.7 → ^0.13.0
19
+ - `zod` ^4.5.4 → ^4.6.1
20
+ - `@biomejs/biome` ^2.5.12 → ^2.5.13
21
+ - `@types/node` ^26.4.1 → ^26.5.1
22
+ - `ignore` ^7.0.8 → ^7.0.9
@@ -117,30 +117,13 @@ security: false
117
117
  in that unrelated item's metadata.
118
118
 
119
119
  TAG ANNOTATIONS — the annotated tag body renders as the GitHub Release body
120
- via `gh release create --notes-from-tag`. The tag is a derivative of this
121
- changelog entry — a condensed, scannable version, not a copy. Format:
122
-
123
- <theme — omit version number, GitHub prepends it>
124
- ← blank line
125
- <1-2 sentence context: what this release does>
126
- ← blank line
127
- Dependency bumps: ← section header
128
- ← blank line
129
- - `@cyanheads/mcp-ts-core` ^0.9.1 → ^0.9.6 ← bullet
130
- ← blank line
131
- Changed: ← only sections with entries
132
- ← blank line
133
- - `format()` output includes `query` in text mode
134
- ← blank line
135
- Added:
136
- ← blank line
137
- - `manifest.json` scaffolded for MCPB bundle support
138
- - Install badges (Claude Desktop, Cursor, VS Code)
139
- ← blank line
140
- <N> tests pass; `bun run devcheck` clean. ← footer
141
-
142
- Never a flat comma-separated string. Always structured markdown with
143
- sections. The tag must scan well as a rendered GitHub Release page.
120
+ via `gh release create --notes-from-tag`. It is a condensed digest of this
121
+ entry, never a copy, and its format is owned by the `release-and-publish`
122
+ skill (step 4, "Create the annotated tag"): the entry's `summary:` as the
123
+ theme line without the version, flat headline bullets — no Keep-a-Changelog
124
+ section headers, no gates line — at most one deps line, issue backlinks,
125
+ and the changelog link last. In release-PR mode the `git-wrapup` skill
126
+ authors that digest as the PR body's `## Changes` and the tag copies it.
144
127
  -->
145
128
 
146
129
  ## Added
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,QAAA,MAAM,kBAAkB;;;;iBActB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,eAAe,IAAI,YAAY,CAO9C"}
1
+ {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,QAAA,MAAM,kBAAkB;;;;iBActB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,eAAe,IAAI,YAAY,CAO9C"}
@@ -3,6 +3,7 @@
3
3
  * @module config/server-config
4
4
  */
5
5
  import { z } from '@cyanheads/mcp-ts-core';
6
+ import { parseEnvConfig } from '@cyanheads/mcp-ts-core/config';
6
7
  const ServerConfigSchema = z.object({
7
8
  apiKey: z
8
9
  .string()
@@ -16,10 +17,10 @@ const ServerConfigSchema = z.object({
16
17
  });
17
18
  let _config;
18
19
  export function getServerConfig() {
19
- _config ??= ServerConfigSchema.parse({
20
- apiKey: process.env.OPENALEX_API_KEY,
21
- mailto: process.env.OPENALEX_MAILTO,
22
- baseUrl: process.env.OPENALEX_BASE_URL,
20
+ _config ??= parseEnvConfig(ServerConfigSchema, {
21
+ apiKey: 'OPENALEX_API_KEY',
22
+ mailto: 'OPENALEX_MAILTO',
23
+ baseUrl: 'OPENALEX_BASE_URL',
23
24
  });
24
25
  return _config;
25
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,sMAAsM,CACvM;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,yKAAyK,CAC1K;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAChG,CAAC,CAAC;AAIH,IAAI,OAAiC,CAAC;AAEtC,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,kBAAkB,CAAC,KAAK,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;QACpC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QACnC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;KACvC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,sMAAsM,CACvM;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,yKAAyK,CAC1K;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAChG,CAAC,CAAC;AAIH,IAAI,OAAiC,CAAC;AAEtC,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,cAAc,CAAC,kBAAkB,EAAE;QAC7C,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/openalex-mcp-server",
3
- "version": "0.7.12",
3
+ "version": "0.7.13",
4
4
  "description": "Access the OpenAlex academic research catalog - 270M+ publications through MCP. STDIO & Streamable HTTP.",
5
5
  "mcpName": "io.github.cyanheads/openalex-mcp-server",
6
6
  "type": "module",
@@ -33,6 +33,7 @@
33
33
  "bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/openalex-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/openalex-mcp-server.mcpb",
34
34
  "generate:field-catalog": "bun scripts/generate-field-catalog.ts",
35
35
  "audit:refresh": "rm -f bun.lock && bun install && bun audit",
36
+ "audit:fix": "bun audit fix",
36
37
  "changelog:build": "bun scripts/build-changelog.ts",
37
38
  "changelog:check": "bun scripts/build-changelog.ts --check",
38
39
  "test": "vitest run",
@@ -80,7 +81,7 @@
80
81
  "license": "Apache-2.0",
81
82
  "engines": {
82
83
  "node": ">=24.0.0",
83
- "bun": ">=1.3.0"
84
+ "bun": ">=1.4.0"
84
85
  },
85
86
  "packageManager": "bun@1.4.0",
86
87
  "publishConfig": {
@@ -88,16 +89,16 @@
88
89
  },
89
90
  "trustedDependencies": ["@socketsecurity/bun-security-scanner"],
90
91
  "dependencies": {
91
- "@cyanheads/mcp-ts-core": "^0.12.7",
92
+ "@cyanheads/mcp-ts-core": "^0.13.0",
92
93
  "pino-pretty": "^13.1.3",
93
- "zod": "^4.5.4"
94
+ "zod": "^4.6.1"
94
95
  },
95
96
  "devDependencies": {
96
- "@biomejs/biome": "^2.5.12",
97
+ "@biomejs/biome": "^2.5.13",
97
98
  "@socketsecurity/bun-security-scanner": "^1.1.2",
98
- "@types/node": "^26.4.1",
99
+ "@types/node": "^26.5.1",
99
100
  "depcheck": "^1.4.7",
100
- "ignore": "^7.0.8",
101
+ "ignore": "^7.0.9",
101
102
  "tsc-alias": "^1.9.4",
102
103
  "typescript": "^7.0.2",
103
104
  "vitest": "^5.0.0"
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/cyanheads/openalex-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.7.12",
9
+ "version": "0.7.13",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
@@ -19,7 +19,7 @@
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/openalex-mcp-server",
21
21
  "runtimeHint": "node",
22
- "version": "0.7.12",
22
+ "version": "0.7.13",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -67,7 +67,7 @@
67
67
  "registryBaseUrl": "https://registry.npmjs.org",
68
68
  "identifier": "@cyanheads/openalex-mcp-server",
69
69
  "runtimeHint": "node",
70
- "version": "0.7.12",
70
+ "version": "0.7.13",
71
71
  "packageArguments": [
72
72
  {
73
73
  "type": "positional",