Skip to content
Draft
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
2 changes: 1 addition & 1 deletion .github/workflows/audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down
8 changes: 2 additions & 6 deletions .github/workflows/publishing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions docs/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -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**
Expand Down Expand Up @@ -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.
Expand All @@ -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`

Expand Down
2 changes: 1 addition & 1 deletion guidelines/agent_behaviors.md
Original file line number Diff line number Diff line change
Expand Up @@ -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**:
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down Expand Up @@ -84,7 +84,7 @@
"typescript-eslint": "^8.58.1"
},
"engines": {
"node": ">=20.0.0"
"node": ">=22.0.0"
},
"repository": {
"type": "git",
Expand Down
16 changes: 8 additions & 8 deletions src/__tests__/__snapshots__/server.tools.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
`;

Expand Down Expand Up @@ -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,
}
`;

Expand Down
12 changes: 6 additions & 6 deletions src/__tests__/server.tools.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -756,16 +756,16 @@ 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: () => {} },
'file:///test/module.js',
'@patternfly/tools',
'DOLOR '
],
expectedModuleCount: 5
expectedModuleCount: 6
}
])('should attempt to setup creators, $description', async ({ modules, nodeVersion, expectedModuleCount }) => {
const mockChild = {
Expand Down
40 changes: 2 additions & 38 deletions tests/e2e/stdioTransport.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: {}
Expand All @@ -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',
Expand All @@ -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);
});
});
Loading