From 5d1bbfdcf062a637ee2aa53e911cb442e07dcd69 Mon Sep 17 00:00:00 2001 From: CD Cabrera Date: Mon, 27 Apr 2026 09:29:46 -0400 Subject: [PATCH 1/2] chore(release): 1.0.1 --- CHANGELOG.md | 23 +++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1a79ba..9a73d73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,29 @@ # Changelog All notable changes to this project will be documented in this file. +## [1.0.1](https://github.com/patternfly/patternfly-mcp/compare/320c784093dc1498c70f99c4f4ff7374be295c02...5a63c12d88adf40fcc9c2cfa5d94b41ce142d543) (2026-04-27) + + +### Documentation +* remove update skill refs for docs.json ([#167](https://github.com/patternfly/patternfly-mcp/pull/167)) ([7d6b188](https://github.com/patternfly/patternfly-mcp/commit/7d6b1884eec5d459f78b44e92ce68b511dc5766a)) + +### Chores +* **docs** pf-4036 add pf-cli, ai-helpers intros ([#166](https://github.com/patternfly/patternfly-mcp/pull/166)) ([5a63c12](https://github.com/patternfly/patternfly-mcp/commit/5a63c12d88adf40fcc9c2cfa5d94b41ce142d543)) + +### Builds +* workflow, coverage, issue templates ([#164](https://github.com/patternfly/patternfly-mcp/pull/164)) ([ec5c76f](https://github.com/patternfly/patternfly-mcp/commit/ec5c76f99f04726f6d2b8dfff27e4dce3b1ac7de)) +* **deps-dev** bump dev group with 4 updates ([#162](https://github.com/patternfly/patternfly-mcp/pull/162)) ([cee9368](https://github.com/patternfly/patternfly-mcp/commit/cee93680f2518827730c6787d5472cc16d4ea6ee)) +* **deps** lock update ([#161](https://github.com/patternfly/patternfly-mcp/pull/161)) ([5c9e9ba](https://github.com/patternfly/patternfly-mcp/commit/5c9e9ba4769b3b6c9dfa3b291b6b53149a5367cb)) +* **deps** @modelcontextprotocol/sdk from 1.27.1 to 1.29.0 ([#159](https://github.com/patternfly/patternfly-mcp/pull/159)) ([161fca1](https://github.com/patternfly/patternfly-mcp/commit/161fca10a6703d8da76b22b3a5093b97f2b07fe5)) +* **deps** bump pid-port from 2.1.0 to 2.1.1 ([#158](https://github.com/patternfly/patternfly-mcp/pull/158)) ([1976ade](https://github.com/patternfly/patternfly-mcp/commit/1976adefa9f38f7d3e35b79137e39a3a3a15cce1)) +* **deps-dev** bump dev group with 5 updates ([#157](https://github.com/patternfly/patternfly-mcp/pull/157)) ([ae338dd](https://github.com/patternfly/patternfly-mcp/commit/ae338ddbd4dcaa013800d6aa263c0cc15ce0c35d)) +* **deps-dev** bump dev group with 3 updates ([#152](https://github.com/patternfly/patternfly-mcp/pull/152)) ([d2d65c4](https://github.com/patternfly/patternfly-mcp/commit/d2d65c4c70531209eb437f6b8d300b3bbe70a2a9)) +* **deps** bump pid-port from 2.0.1 to 2.1.0 ([#150](https://github.com/patternfly/patternfly-mcp/pull/150)) ([6a47a78](https://github.com/patternfly/patternfly-mcp/commit/6a47a78351fc23b8fa5a296e6959a2d428222bf5)) +* **deps-dev** bump dev group with 4 updates ([#149](https://github.com/patternfly/patternfly-mcp/pull/149)) ([b6f99ea](https://github.com/patternfly/patternfly-mcp/commit/b6f99ea7766420a7197620b69c7d20e861bdcbfc)) + +### Bug Fixes +* **server** catch tool registration errors ([#155](https://github.com/patternfly/patternfly-mcp/pull/155)) ([934f7c7](https://github.com/patternfly/patternfly-mcp/commit/934f7c73903d2feaf00a2fdf5ea6666f1ffa84ae)) + ## [1.0.0](https://github.com/patternfly/patternfly-mcp/compare/eab711f0d79baa3b1a092514f83bffc2d9ada71d...d7185c712d90741480098d6dd2cac72242ca8445) (2026-03-30) ⚠ BREAKING CHANGES, remove componentSchemas MCP tool, favor MCP resources instead, see [#137](https://github.com/patternfly/patternfly-mcp/pull/137) diff --git a/package-lock.json b/package-lock.json index c1ef026..e75e045 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@patternfly/patternfly-mcp", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@patternfly/patternfly-mcp", - "version": "1.0.0", + "version": "1.0.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "1.29.0", diff --git a/package.json b/package.json index b80d4b0..3176c5f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/patternfly-mcp", - "version": "1.0.0", + "version": "1.0.1", "description": "PatternFly documentation MCP server built with Node.js and TypeScript", "main": "dist/index.js", "type": "module", From 498123b47791656b539503f7bd02b96ca11e71c8 Mon Sep 17 00:00:00 2001 From: CD Cabrera Date: Mon, 27 Apr 2026 09:56:19 -0400 Subject: [PATCH 2/2] build(node.js)!: pf-3843 remove 20 support * audit, publishing baselines moved to node.js 24 * build, engine, moved to node.js 22 minimum * docs, references moved to node.js 22 * tests, e2e, cleaned node.js 20 checks --- .github/workflows/audit.yml | 2 +- .github/workflows/integration.yml | 2 +- .github/workflows/publishing.yml | 8 +--- README.md | 2 +- docs/development.md | 6 +-- guidelines/agent_behaviors.md | 2 +- package.json | 2 +- .../__snapshots__/server.tools.test.ts.snap | 16 ++++---- src/__tests__/server.tools.test.ts | 12 +++--- tests/e2e/stdioTransport.test.ts | 40 +------------------ 10 files changed, 26 insertions(+), 66 deletions(-) diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml index 24ed904..0b36e28 100644 --- a/.github/workflows/audit.yml +++ b/.github/workflows/audit.yml @@ -19,7 +19,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: 22.x + node-version: '24' cache: npm - name: Install dependencies run: npm ci diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index b53d140..ffcb274 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -13,7 +13,7 @@ jobs: contents: read strategy: matrix: - node-version: [20.x, 22.x, 24.x] + node-version: [22.x, 24.x] steps: - uses: actions/checkout@v6 - name: Setup Node.js ${{ matrix.node-version }} diff --git a/.github/workflows/publishing.yml b/.github/workflows/publishing.yml index 7f706b1..2fae77a 100644 --- a/.github/workflows/publishing.yml +++ b/.github/workflows/publishing.yml @@ -10,16 +10,12 @@ jobs: permissions: contents: read id-token: write - strategy: - matrix: - node: [22.x] steps: - uses: actions/checkout@v6 - - name: Setup Node.js ${{ matrix.node-version }} + - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: ${{ matrix.node-version }} - cache: npm + node-version: '24' registry-url: 'https://registry.npmjs.org' - name: Install dependencies run: npm ci diff --git a/README.md b/README.md index c990a1e..aea9e41 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ It is intended to be extensible to meet the needs of different teams and project [Read more about our roadmap and how we've structured the server in our architecture docs](./docs/architecture.md). ## Requirements -- [Node.js 20+](https://nodejs.org/) +- [Node.js 22+](https://nodejs.org/) - NPM (or equivalent package manager) ## Quick start diff --git a/docs/development.md b/docs/development.md index 045cd0f..454edd2 100644 --- a/docs/development.md +++ b/docs/development.md @@ -140,7 +140,7 @@ The documentation catalog `src/docs.json` pins remote resources to specific comm #### Programmatic runtime requirements -- **Node.js 20+**: Required to run the core MCP server. +- **Node.js 22+**: Required to run the core MCP server. - **Node.js 22+**: Required for loading external tool plugins (`--tool`) and for developers working on advanced process isolation features. **Example: Programmatic test mode** @@ -381,7 +381,7 @@ These terms describe **how tools and their related properties are represented** ### Tool plugins -- **Plugins don't appear**: Verify the Node version (requires Node.js >= 20; >= 22 for tool plugins) and check logs (enable `--log-stderr`). +- **Plugins don't appear**: Verify the Node version (requires Node.js >= 22 for tool plugins) and check logs (enable `--log-stderr`). - **Startup warnings/errors**: Startup `load:ack` warnings/errors from tool plugins are logged when stderr/protocol logging is enabled. - **Schema errors**: If `tools/call` rejects with schema errors, ensure `inputSchema` is valid. See [Authoring tools](#authoring-tools) for details. - **Network access issues**: If the tool is having network access issues, you may need to configure `--plugin-isolation none`. This is generally discouraged for security reasons but may be necessary in some cases. @@ -394,7 +394,7 @@ These terms describe **how tools and their related properties are represented** ### General issues -- **Server won't start**: Check Node.js version (requires Node.js >= 20; >= 22 for tool plugins). +- **Server won't start**: Check Node.js version (requires Node.js >= 22 for tool plugins). - **Missing tools/resources**: Verify the server started successfully and check logs with `--log-stderr`. - **Type errors**: Ensure TypeScript types are installed: `npm install --save-dev @types/node` diff --git a/guidelines/agent_behaviors.md b/guidelines/agent_behaviors.md index 6b28de4..80c967b 100644 --- a/guidelines/agent_behaviors.md +++ b/guidelines/agent_behaviors.md @@ -46,7 +46,7 @@ For a detailed overview of the system design and roadmap, see [docs/architecture - **Confirmation Required**: Confirm success; summarize changes; explain impact; verify understanding. - **Guidance Review Scope**: Unless the user explicitly asks, do not make recommendations on improving guidance if all you're asked to do is review guidance. - **Environment Awareness**: - - Server execution requires **Node.js >= 20**. + - Server execution requires **Node.js >= 22**. - External tool plugins (`--tool`) require **Node.js >= 22** primarily for its robust **Permission Model** (`--experimental-permission`), which enables strict filesystem and network isolation. - Always verify environment compatibility when proposing tools using modern Node.js features. - **Security Context**: diff --git a/package.json b/package.json index 3176c5f..e987f83 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "typescript-eslint": "^8.58.1" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" }, "repository": { "type": "git", diff --git a/src/__tests__/__snapshots__/server.tools.test.ts.snap b/src/__tests__/__snapshots__/server.tools.test.ts.snap index cab35b5..0fe70b8 100644 --- a/src/__tests__/__snapshots__/server.tools.test.ts.snap +++ b/src/__tests__/__snapshots__/server.tools.test.ts.snap @@ -14,17 +14,14 @@ exports[`composeTools should attempt to setup creators, file package creators 1` } `; -exports[`composeTools should attempt to setup creators, file package creators, Node.js 20 1`] = ` +exports[`composeTools should attempt to setup creators, file package creators, Node.js 22 1`] = ` { "log": [ [ "Existing Tools Host session detected test-session-id. Shutting down the existing host before creating a new one.", ], - [ - "External tool plugins require Node >= 22; skipping file-based tools.", - ], ], - "toolsCount": 3, + "toolsCount": 5, } `; @@ -112,17 +109,20 @@ exports[`composeTools should attempt to setup creators, inline and file package } `; -exports[`composeTools should attempt to setup creators, inline and file package creators, duplicates, Node.js 20 1`] = ` +exports[`composeTools should attempt to setup creators, inline and file package creators, duplicates, Node.js 22 1`] = ` { "log": [ [ "Existing Tools Host session detected test-session-id. Shutting down the existing host before creating a new one.", ], [ - "External tool plugins require Node >= 22; skipping file-based tools.", + "Skipping tool plugin "@patternfly/tools" – name already used by built-in/inline tool.", + ], + [ + "Skipping tool plugin "DOLOR " – name already used by built-in/inline tool.", ], ], - "toolsCount": 5, + "toolsCount": 6, } `; diff --git a/src/__tests__/server.tools.test.ts b/src/__tests__/server.tools.test.ts index b2398c7..cd5c1ad 100644 --- a/src/__tests__/server.tools.test.ts +++ b/src/__tests__/server.tools.test.ts @@ -700,10 +700,10 @@ describe('composeTools', () => { expectedModuleCount: 5 }, { - description: 'file package creators, Node.js 20', - nodeVersion: 20, + description: 'file package creators, Node.js 22', + nodeVersion: 22, modules: ['file:///test/module.js', '@patternfly/tools'], - expectedModuleCount: 3 + expectedModuleCount: 5 }, { description: 'file package creators, Node.js 24', @@ -756,8 +756,8 @@ describe('composeTools', () => { expectedModuleCount: 6 }, { - description: 'inline and file package creators, duplicates, Node.js 20', - nodeVersion: 20, + description: 'inline and file package creators, duplicates, Node.js 22', + nodeVersion: 22, modules: [ { name: '@patternfly/tools', description: 'lorem ipsum', inputSchema: {}, handler: () => {} }, { name: 'dolor', description: 'sit amet', inputSchema: z.object({}), handler: () => {} }, @@ -765,7 +765,7 @@ describe('composeTools', () => { '@patternfly/tools', 'DOLOR ' ], - expectedModuleCount: 5 + expectedModuleCount: 6 } ])('should attempt to setup creators, $description', async ({ modules, nodeVersion, expectedModuleCount }) => { const mockChild = { diff --git a/tests/e2e/stdioTransport.test.ts b/tests/e2e/stdioTransport.test.ts index 8907206..52fcf85 100644 --- a/tests/e2e/stdioTransport.test.ts +++ b/tests/e2e/stdioTransport.test.ts @@ -443,7 +443,7 @@ describe('Tools', () => { afterEach(async () => CLIENT.stop()); - itSkip(envNodeVersion >= 22)('should access new tools', async () => { + it('should access new tools', async () => { const req = { method: 'tools/list', params: {} @@ -461,18 +461,7 @@ describe('Tools', () => { expect(names).toContain('echo_createMcp_tool'); }); - itSkip(envNodeVersion <= 20)('should fail to access a new tool', async () => { - const req = { - method: 'tools/list', - params: {} - }; - - await CLIENT.send(req); - - expect(CLIENT.logs().join(',')).toContain('External tool plugins require Node >= 22; skipping file-based tools.'); - }); - - itSkip(envNodeVersion >= 22).each([ + it.each([ { description: 'echo basic tool', name: 'echo_basic_tool', @@ -497,29 +486,4 @@ describe('Tools', () => { expect(resp.result).toMatchSnapshot(); expect(resp.result.isError).toBeUndefined(); }); - - itSkip(envNodeVersion <= 20).each([ - { - description: 'echo basic tool', - name: 'echo_basic_tool', - args: { type: 'echo', lorem: 'ipsum', dolor: 'sit amet' } - }, - { - description: 'echo create MCP tool', - name: 'echo_createMcp_tool', - args: { type: 'echo', lorem: 'ipsum', dolor: 'sit amet' } - } - ])('should fail to interact with a tool, $description', async ({ name, args }) => { - const req = { - method: 'tools/call', - params: { - name, - arguments: args - } - }; - - const resp: any = await CLIENT.send(req); - - expect(resp.result.isError).toBe(true); - }); });