@cyanheads/openalex-mcp-server 0.6.0 → 0.6.2

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/CLAUDE.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Agent Protocol
2
2
 
3
3
  **Server:** openalex-mcp-server
4
- **Version:** 0.6.0
4
+ **Version:** 0.6.2
5
5
  **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
6
6
 
7
7
  > **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.
@@ -97,8 +97,9 @@ export const resolveNameTool = tool('openalex_resolve_name', {
97
97
  // Different clients forward different surfaces (Claude Code → structuredContent,
98
98
  // Claude Desktop → content[]); both must carry the same data.
99
99
  // Enforced at lint time: every terminal field in `output` must appear in format()'s
100
- // rendered text via sentinel injection. Avoid `.toLocaleString()` on linted numbers —
101
- // comma-formatted values (900,000,001) won't match the raw sentinel (900000001).
100
+ // rendered text via sentinel injection. The linter is locale-aware — digit-group
101
+ // separators (commas, periods, spaces) are stripped before matching, so
102
+ // `.toLocaleString()` is fine on linted numbers. Compact/scientific forms still fail.
102
103
  format: (result) => {
103
104
  if (result.results.length === 0) {
104
105
  return [{ type: 'text', text: 'No matches found.' }];
@@ -288,8 +289,8 @@ import { getOpenAlexService } from '@/services/openalex/openalex-service.js';
288
289
  ## Checklist
289
290
 
290
291
  - [ ] Zod schemas: all fields have `.describe()`, only JSON-Schema-serializable types (no `z.custom()`, `z.date()`, `z.transform()`, etc.)
291
- - [ ] Optional nested objects: handler guards for empty inner values from form-based clients (`if (input.obj?.field && ...)`, not just `if (input.obj)`)
292
- - [ ] `format()` renders every terminal field in `output` — enforced by `format-parity` linter via sentinel injection; avoid `.toLocaleString()` on linted numbers
292
+ - [ ] Optional nested objects: handler guards for empty inner values from form-based clients (`if (input.obj?.field && ...)`, not just `if (input.obj)`). When regex/length constraints matter, use `z.union([z.literal(''), z.string().regex(...).describe(...)])` — literal variants are exempt from `describe-on-fields`.
293
+ - [ ] `format()` renders every terminal field in `output` — enforced by `format-parity` linter via sentinel injection (locale-aware: digit-group separators stripped before matching)
293
294
  - [ ] JSDoc `@fileoverview` + `@module` on every file
294
295
  - [ ] `ctx.log` for logging, `ctx.state` for storage
295
296
  - [ ] Handlers throw on failure — error factories or plain `Error`, no try/catch
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  <div align="center">
8
8
 
9
- [![Version](https://img.shields.io/badge/Version-0.6.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-259?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/)
9
+ [![Version](https://img.shields.io/badge/Version-0.6.2-blue.svg?style=flat-square)](./CHANGELOG.md) [![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-259?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/)
10
10
 
11
11
  </div>
12
12
 
@@ -156,6 +156,7 @@ bun install
156
156
  | `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |
157
157
  | `MCP_HTTP_PORT` | Port for HTTP server. | `3010` |
158
158
  | `MCP_AUTH_MODE` | Auth mode: `none`, `jwt`, or `oauth`. | `none` |
159
+ | `MCP_ALLOWED_ORIGINS` | Comma-separated allow-list of browser `Origin` headers for HTTP transport. Unset = loopback-only; set to `*` to disable. | _loopback only_ |
159
160
  | `MCP_LOG_LEVEL` | Log level (RFC 5424). | `debug` |
160
161
  | `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |
161
162
  | `OTEL_ENABLED` | Enable OpenTelemetry. | `false` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/openalex-mcp-server",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
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",
@@ -70,7 +70,7 @@
70
70
  "access": "public"
71
71
  },
72
72
  "dependencies": {
73
- "@cyanheads/mcp-ts-core": "^0.6.17",
73
+ "@cyanheads/mcp-ts-core": "^0.7.4",
74
74
  "pino-pretty": "^13.1.3"
75
75
  },
76
76
  "devDependencies": {
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.6.0",
9
+ "version": "0.6.2",
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.6.0",
22
+ "version": "0.6.2",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -61,7 +61,7 @@
61
61
  "registryBaseUrl": "https://registry.npmjs.org",
62
62
  "identifier": "@cyanheads/openalex-mcp-server",
63
63
  "runtimeHint": "node",
64
- "version": "0.6.0",
64
+ "version": "0.6.2",
65
65
  "packageArguments": [
66
66
  {
67
67
  "type": "positional",