Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Changelog

All notable changes to this project will be documented in this file.

The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.0.3] - 2026-08-27

### Fixed

- Aligned `.env.example`, documentation, and tests on `DOCUMENT_ENGINE_API_AUTH_TOKEN` (the variable the server actually reads). (#13)
- The optional HTTP transport now fails closed: it refuses to start without inbound authentication configured instead of listening unauthenticated. (#13)

### Added

- MCP registry metadata: `server.json` and the `mcpName` field (`io.github.PSPDFKit/nutrient-document-engine-mcp-server`), first published to the official MCP registry as 0.0.3. (#12)

## [0.0.2]

- Published to npm before this changelog existed; no release notes were recorded and the release was not tagged in git.

## [0.0.1]

- Initial npm release.
58 changes: 58 additions & 0 deletions RELEASING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Releasing

Use this checklist for every release, in order, from a clean checkout of the reviewed release commit. Stop if any verification fails.

This checklist was added after 0.0.2 shipped to npm with no git tag and no commit on `main` representing it. 0.0.3 (2026-08-27) was the first release where the npm package, the MCP registry entry, and a signed git tag all traced to one commit — keep it that way.

## Canonical metadata

- Name: Nutrient Document Engine MCP Server
- Repository: `https://github.com/PSPDFKit/nutrient-document-engine-mcp-server`
- npm package: `@nutrient-sdk/document-engine-mcp-server`
- MCP Registry name: `io.github.PSPDFKit/nutrient-document-engine-mcp-server`
- Transport: stdio (the HTTP transport is optional and requires inbound auth)

## 1. Prepare the release

- [ ] Confirm the release commit is reviewed and merged to `main`, and the working tree is clean.
- [ ] Set the version: `VERSION=x.y.z`.
- [ ] Update `package.json` `version` to `${VERSION}`. Do not change the package name or `mcpName`.
- [ ] Update both `version` and `packages[0].version` in `server.json` to `${VERSION}`.
- [ ] Add `## [${VERSION}] - YYYY-MM-DD` to `CHANGELOG.md` covering user-visible changes, configuration changes, and breaking changes.
- [ ] Land these through the normal review process (this repo enforces one approving review; the author cannot self-approve).

## 2. Run release gates

- [ ] `pnpm install --frozen-lockfile`
- [ ] `pnpm run lint`
- [ ] `pnpm run build`
- [ ] `pnpm test`
- [ ] `npm publish --dry-run` — confirm the file list is `dist`, `README.md`, `LICENSE`, `package.json` and the version is `${VERSION}`.

## 3. Tag

- [ ] `git tag -s "v${VERSION}" -m "Document Engine MCP v${VERSION}"`
- [ ] Push the tag: `git push origin "v${VERSION}"`.
- [ ] Verify `git rev-list -n 1 "v${VERSION}"` is the reviewed release commit.

## 4. Publish npm

- [ ] Confirm identity: `npm whoami`. A publish failing with `E404 Not Found` on `PUT` usually means the npm session expired (`npm whoami` returns `E401`) — run `npm login` and retry; it is not a package-access error.
- [ ] `npm publish --access public` (with `--otp` when prompted). `prepublishOnly` runs the build automatically; dependencies must be installed first.
- [ ] Verify: `npm view "@nutrient-sdk/document-engine-mcp-server@${VERSION}" version mcpName`— `mcpName` must be present in the published package or the registry publish below will fail.

## 5. GitHub Release

- [ ] `gh release create "v${VERSION}" --verify-tag --title "Document Engine MCP v${VERSION}" --generate-notes`

## 6. Publish to the official MCP Registry

- [ ] Confirm npm already serves `${VERSION}` and `server.json` names that same version.
- [ ] Authenticate: PSPDFKit enforces SAML SSO, so the interactive device flow only grants the personal namespace. Create a **classic** PAT with only the `read:org` scope, authorize it for PSPDFKit via **Configure SSO**, then `mcp-publisher login github -token <PAT>`. Note: `mcp-publisher` ≥ 1.8 stores tokens under `~/.config/mcp-publisher/`; re-login after upgrading.
- [ ] From the repository root: `mcp-publisher publish`.
- [ ] Verify: `curl -fsSL 'https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.PSPDFKit%2Fnutrient-document-engine-mcp-server'` shows `${VERSION}` as latest/active.
- [ ] Revoke the PAT.

## 7. Final verification

- [ ] Tag, npm package, GitHub Release, and MCP Registry entry all show `${VERSION}` and point at the same commit.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
],
"scripts": {
"build": "tsc && shx chmod +x dist/index.js",
"prepublishOnly": "npm run build",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"pretest": "tsc --project tsconfig.test.json --noEmit",
Expand Down