From bcb48839df433c62677c6e3a0d4bf8841e68b67a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 19 Oct 2026 07:14:42 +0000 Subject: [PATCH] chore(release): v5.1.0 Bump version in package.json, package-lock.json, server.json and SERVER_VERSION, and cut the 5.1.0 CHANGELOG entry covering the stdio lifecycle fix for orphaned/crashed servers spinning at 100% CPU (#36, fixes #35) and the @modelcontextprotocol/client 2.2.0 dev dependency update (#34). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DuaDwBdUFraDUa7S9kfo3G --- CHANGELOG.md | 18 ++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/config.ts | 2 +- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb6ebf9..db5ef60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [5.1.0] - 2026-10-19 + +### Fixed + +- **Orphaned or crashed servers exit instead of spinning at 100% CPU** — The `uncaughtException` / `unhandledRejection` handlers logged the error and kept running. Once stdio broke (the parent exited, and every write failed with EPIPE), each log attempt threw again, so the process looped forever at full CPU. Short-lived clients that spawn MCP servers and exit leaked one such process per run. Fatal errors are now logged once through a guarded reporter, then the process exits with code 1 (#35, #36). Thanks to @S0ya13 for the report and fix. + +### Changed + +- **Behavior change: stdio lifecycle** — The server exits with code 0 when stdin ends or closes, and on `SIGTERM` / `SIGINT`. Per the MCP stdio shutdown sequence, closing stdin means the client is shutting down. Requests still in flight at that point are not answered, so a script that pipes requests in and closes stdin straight away may miss replies to slow calls such as `op_run`. An unhandled promise rejection now ends the process with exit code 1, the Node.js default, instead of being logged and ignored. + +### Added + +- **Stdio lifecycle tests** — `tests/stdio-lifecycle.test.ts` spawns the built server and checks that it exits on stdin EOF and exits non-zero after a fatal error. + +### Dependencies + +- Dev dependency `@modelcontextprotocol/client` updated from 2.0.0 to 2.2.0 (tests only, #34). + ## [5.0.0] - 2026-10-04 Major release: the resource URIs changed (see **Breaking** below), and it includes security hardening from an internal review. Read **Changed** before upgrading: the vault allow-list now applies server-wide, and `item_get` hides more field types by default. Tool names and input parameters, prompts, and the Node.js requirement are unchanged. diff --git a/package-lock.json b/package-lock.json index a97c979..ef58dff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@takescake/1password-mcp", - "version": "5.0.0", + "version": "5.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@takescake/1password-mcp", - "version": "5.0.0", + "version": "5.1.0", "license": "Apache-2.0", "dependencies": { "@1password/sdk": "^0.3.1", diff --git a/package.json b/package.json index 419e882..42c5595 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@takescake/1password-mcp", - "version": "5.0.0", + "version": "5.1.0", "private": false, "type": "module", "description": "Security-first MCP server for 1Password — vault/item tools, prompts, resources, and op_run secret injection (MCP 2026-07-28)", diff --git a/server.json b/server.json index 17f152d..546457f 100644 --- a/server.json +++ b/server.json @@ -6,12 +6,12 @@ "url": "https://github.com/CakeRepository/1Password-MCP.git", "source": "github" }, - "version": "5.0.0", + "version": "5.1.0", "packages": [ { "registryType": "npm", "identifier": "@takescake/1password-mcp", - "version": "5.0.0", + "version": "5.1.0", "transport": { "type": "stdio" }, diff --git a/src/config.ts b/src/config.ts index a11ca68..3573dea 100644 --- a/src/config.ts +++ b/src/config.ts @@ -6,7 +6,7 @@ import { execFileSync } from "node:child_process"; import { LOG_LEVEL_VALUES, type LogLevel } from "./types.js"; export const SERVER_NAME = "1password-mcp"; -export const SERVER_VERSION = "5.0.0"; +export const SERVER_VERSION = "5.1.0"; /** Parse a `--flag value` or `--flag=value` argument from process.argv. */ function getArgValue(name: string): string | undefined {