@cyanheads/pubmed-mcp-server 2.5.1 → 2.5.3
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 +11 -5
- package/README.md +3 -1
- package/package.json +2 -2
- package/server.json +9 -3
package/CLAUDE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** @cyanheads/pubmed-mcp-server
|
|
4
|
-
**Version:** 2.5.
|
|
4
|
+
**Version:** 2.5.3
|
|
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.
|
|
@@ -230,6 +230,7 @@ Available skills:
|
|
|
230
230
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
231
231
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
232
232
|
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills after `bun update --latest` |
|
|
233
|
+
| `release-and-publish` | Ship a release: verification gate, push commits+tags, publish to npm / MCP Registry / GHCR |
|
|
233
234
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
234
235
|
| `api-config` | AppConfig, parseConfig, env vars |
|
|
235
236
|
| `api-context` | Context interface, logger, state, progress |
|
|
@@ -267,7 +268,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
267
268
|
|
|
268
269
|
## Publishing
|
|
269
270
|
|
|
270
|
-
|
|
271
|
+
Run the `release-and-publish` skill after git wrapup — it runs the verification gate (`devcheck`, `rebuild`, `test`), pushes commits and tags, and publishes to npm, the MCP Registry, and GHCR, halting on the first failure. For reference, the underlying commands are:
|
|
271
272
|
|
|
272
273
|
```bash
|
|
273
274
|
bun publish --access public
|
|
@@ -276,9 +277,9 @@ docker buildx build --platform linux/amd64,linux/arm64 \
|
|
|
276
277
|
-t ghcr.io/cyanheads/pubmed-mcp-server:<version> \
|
|
277
278
|
-t ghcr.io/cyanheads/pubmed-mcp-server:latest \
|
|
278
279
|
--push .
|
|
279
|
-
```
|
|
280
280
|
|
|
281
|
-
|
|
281
|
+
mcp-publisher publish
|
|
282
|
+
```
|
|
282
283
|
|
|
283
284
|
---
|
|
284
285
|
|
|
@@ -297,10 +298,15 @@ import { getNcbiService } from '@/services/ncbi/ncbi-service.js';
|
|
|
297
298
|
|
|
298
299
|
## Checklist
|
|
299
300
|
|
|
300
|
-
- [ ] Zod schemas: all fields have `.describe()`, only JSON-Schema-serializable types (no `z.custom()`, `z.date()`, `z.transform()`,
|
|
301
|
+
- [ ] Zod schemas: all fields have `.describe()`, only JSON-Schema-serializable types (no `z.custom()`, `z.date()`, `z.transform()`, `z.bigint()`, `z.symbol()`, `z.void()`, `z.map()`, `z.set()`, `z.function()`, `z.nan()`)
|
|
302
|
+
- [ ] Optional nested objects: handler guards for empty inner values from form-based clients (`if (input.obj?.field && ...)`, not just `if (input.obj)`)
|
|
301
303
|
- [ ] JSDoc `@fileoverview` + `@module` on every file
|
|
302
304
|
- [ ] `ctx.log` for logging, `ctx.state` for storage
|
|
303
305
|
- [ ] Handlers throw on failure — error factories or plain `Error`, no try/catch
|
|
306
|
+
- [ ] `format()` renders all data the LLM needs — different clients forward different surfaces (Claude Code → `structuredContent`, Claude Desktop → `content[]`); both must carry the same data
|
|
307
|
+
- [ ] NCBI wrapping: raw/domain/output schemas reviewed against real upstream sparsity/nullability before finalizing required vs optional fields
|
|
308
|
+
- [ ] NCBI wrapping: normalization and `format()` preserve uncertainty; do not fabricate facts from missing upstream data
|
|
309
|
+
- [ ] NCBI wrapping: tests include at least one sparse payload case with omitted upstream fields
|
|
304
310
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
305
311
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
306
312
|
- [ ] `bun run devcheck` passes
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](https://www.npmjs.com/package/@cyanheads/pubmed-mcp-server) [](https://www.npmjs.com/package/@cyanheads/pubmed-mcp-server) [](./CHANGELOG.md) [](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) [](https://modelcontextprotocol.io/)
|
|
11
11
|
|
|
12
12
|
[](./LICENSE) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
13
13
|
|
|
@@ -277,6 +277,8 @@ All configuration is validated at startup via Zod schemas in `src/config/server-
|
|
|
277
277
|
|:---|:---|:---|
|
|
278
278
|
| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http` | `stdio` |
|
|
279
279
|
| `MCP_HTTP_PORT` | HTTP server port | `3010` |
|
|
280
|
+
| `MCP_HTTP_ENDPOINT_PATH` | HTTP endpoint path where the MCP server is mounted | `/mcp` |
|
|
281
|
+
| `MCP_PUBLIC_URL` | Public origin override for TLS-terminating reverse-proxy deployments (landing page, Server Card, RFC 9728 metadata). | none |
|
|
280
282
|
| `MCP_AUTH_MODE` | Authentication: `none`, `jwt`, or `oauth` | `none` |
|
|
281
283
|
| `MCP_LOG_LEVEL` | Log level (`debug`, `info`, `warning`, `error`, etc.) | `info` |
|
|
282
284
|
| `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/pubmed-mcp-server",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.3",
|
|
4
4
|
"mcpName": "io.github.cyanheads/pubmed-mcp-server",
|
|
5
5
|
"description": "MCP server for PubMed/NCBI E-utilities integration. Search articles, fetch metadata, generate citations, explore MeSH terms, and discover related research.",
|
|
6
6
|
"type": "module",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"access": "public"
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@cyanheads/mcp-ts-core": "^0.6.
|
|
70
|
+
"@cyanheads/mcp-ts-core": "^0.6.10",
|
|
71
71
|
"fast-xml-parser": "^5.7.1",
|
|
72
72
|
"pino-pretty": "^13.1.3",
|
|
73
73
|
"sanitize-html": "^2.17.3"
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/pubmed-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "2.5.
|
|
9
|
+
"version": "2.5.3",
|
|
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/pubmed-mcp-server",
|
|
21
21
|
"runtimeHint": "bun",
|
|
22
|
-
"version": "2.5.
|
|
22
|
+
"version": "2.5.3",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
61
61
|
"identifier": "@cyanheads/pubmed-mcp-server",
|
|
62
62
|
"runtimeHint": "bun",
|
|
63
|
-
"version": "2.5.
|
|
63
|
+
"version": "2.5.3",
|
|
64
64
|
"packageArguments": [
|
|
65
65
|
{
|
|
66
66
|
"type": "positional",
|
|
@@ -93,6 +93,12 @@
|
|
|
93
93
|
"isRequired": false,
|
|
94
94
|
"default": "/mcp"
|
|
95
95
|
},
|
|
96
|
+
{
|
|
97
|
+
"name": "MCP_PUBLIC_URL",
|
|
98
|
+
"description": "Public origin override for deployments behind a TLS-terminating reverse proxy (e.g. https://mcp.example.com).",
|
|
99
|
+
"format": "string",
|
|
100
|
+
"isRequired": false
|
|
101
|
+
},
|
|
96
102
|
{
|
|
97
103
|
"name": "MCP_AUTH_MODE",
|
|
98
104
|
"description": "Authentication mode to use: 'none', 'jwt', or 'oauth'.",
|