Skip to content

Commit 2c70844

Browse files
author
Lukas Geiger
committed
test: guard codecommander metadata
1 parent e4f4c09 commit 2c70844

4 files changed

Lines changed: 67 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

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

5+
## [Unreleased]
6+
7+
### Added
8+
- Add a metadata regression test for package/server version alignment and the README family tool count.
9+
10+
### Fixed
11+
- Correct the CodeCommander tool count in the README and README_de MCP family tables from the stale 17-tool value to 21.
12+
513
## [1.3.13] - 2026-06-22
614

715
### Added

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ This MCP server is part of the **[ellmos-ai](https://github.com/ellmos-ai)** eco
280280
| Server | Tools | Focus | npm |
281281
|--------|-------|-------|-----|
282282
| [FileCommander](https://github.com/ellmos-ai/ellmos-filecommander-mcp) | 44 | Filesystem, process management, interactive sessions | [`ellmos-filecommander-mcp`](https://www.npmjs.com/package/ellmos-filecommander-mcp) |
283-
| **[CodeCommander](https://github.com/ellmos-ai/ellmos-codecommander-mcp)** | **17** | **Code analysis, AST parsing, import management** | **[`ellmos-codecommander-mcp`](https://www.npmjs.com/package/ellmos-codecommander-mcp)** |
283+
| **[CodeCommander](https://github.com/ellmos-ai/ellmos-codecommander-mcp)** | **21** | **Code analysis, AST parsing, import management** | **[`ellmos-codecommander-mcp`](https://www.npmjs.com/package/ellmos-codecommander-mcp)** |
284284
| [Clatcher](https://github.com/ellmos-ai/ellmos-clatcher-mcp) | 12 | File repair, format conversion, batch operations | [`ellmos-clatcher-mcp`](https://www.npmjs.com/package/ellmos-clatcher-mcp) |
285285
| [n8n Manager](https://github.com/ellmos-ai/n8n-manager-mcp) | 18 | n8n workflow management via AI assistants | [`n8n-manager-mcp`](https://www.npmjs.com/package/n8n-manager-mcp) |
286286
| [ControlCenter](https://github.com/ellmos-ai/ellmos-controlcenter-mcp) | 10 | MCP stack discovery, profile management, control plane | [`ellmos-controlcenter-mcp`](https://www.npmjs.com/package/ellmos-controlcenter-mcp) |

README_de.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ Dieser MCP-Server ist Teil des **[ellmos-ai](https://github.com/ellmos-ai)**-Ök
280280
| Server | Tools | Fokus | npm |
281281
|--------|-------|-------|-----|
282282
| [FileCommander](https://github.com/ellmos-ai/ellmos-filecommander-mcp) | 44 | Dateisystem, Prozessverwaltung, interaktive Sitzungen | [`ellmos-filecommander-mcp`](https://www.npmjs.com/package/ellmos-filecommander-mcp) |
283-
| **[CodeCommander](https://github.com/ellmos-ai/ellmos-codecommander-mcp)** | **17** | **Code-Analyse, AST-Parsing, Import-Verwaltung** | **[`ellmos-codecommander-mcp`](https://www.npmjs.com/package/ellmos-codecommander-mcp)** |
283+
| **[CodeCommander](https://github.com/ellmos-ai/ellmos-codecommander-mcp)** | **21** | **Code-Analyse, AST-Parsing, Import-Verwaltung** | **[`ellmos-codecommander-mcp`](https://www.npmjs.com/package/ellmos-codecommander-mcp)** |
284284
| [Clatcher](https://github.com/ellmos-ai/ellmos-clatcher-mcp) | 12 | Dateireparatur, Formatkonvertierung, Batch-Operationen | [`ellmos-clatcher-mcp`](https://www.npmjs.com/package/ellmos-clatcher-mcp) |
285285
| [n8n Manager](https://github.com/ellmos-ai/n8n-manager-mcp) | 18 | n8n-Workflow-Verwaltung über KI-Assistenten | [`n8n-manager-mcp`](https://www.npmjs.com/package/n8n-manager-mcp) |
286286
| [ControlCenter](https://github.com/ellmos-ai/ellmos-controlcenter-mcp) | 10 | MCP-Stack-Discovery, Profilverwaltung, Control Plane | [`ellmos-controlcenter-mcp`](https://www.npmjs.com/package/ellmos-controlcenter-mcp) |

test/metadata.test.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { readFile } from "node:fs/promises";
2+
import { describe, expect, it } from "vitest";
3+
4+
const EXPECTED_TOOL_COUNT = 21;
5+
6+
type PackageMetadata = {
7+
name: string;
8+
version: string;
9+
mcpName: string;
10+
};
11+
12+
type ServerMetadata = {
13+
name: string;
14+
version: string;
15+
packages: Array<{
16+
identifier: string;
17+
version: string;
18+
}>;
19+
};
20+
21+
async function readText(relativePath: string): Promise<string> {
22+
return readFile(new URL(`../${relativePath}`, import.meta.url), "utf-8");
23+
}
24+
25+
async function readJson<T>(relativePath: string): Promise<T> {
26+
return JSON.parse(await readText(relativePath)) as T;
27+
}
28+
29+
function codeCommanderFamilyRow(readme: string): string {
30+
const row = readme
31+
.split(/\r?\n/)
32+
.find((line) => line.includes("ellmos-codecommander-mcp") && line.includes("CodeCommander") && line.includes("|"));
33+
34+
expect(row, "CodeCommander family row").toBeDefined();
35+
return row ?? "";
36+
}
37+
38+
describe("project metadata", () => {
39+
it("keeps package and MCP Registry metadata versions aligned", async () => {
40+
const pkg = await readJson<PackageMetadata>("package.json");
41+
const server = await readJson<ServerMetadata>("server.json");
42+
43+
expect(server.name).toBe(pkg.mcpName);
44+
expect(server.version).toBe(pkg.version);
45+
expect(server.packages[0]?.identifier).toBe(pkg.name);
46+
expect(server.packages[0]?.version).toBe(pkg.version);
47+
});
48+
49+
it("keeps README family tool counts aligned with the current tool surface", async () => {
50+
for (const fileName of ["README.md", "README_de.md"]) {
51+
const row = codeCommanderFamilyRow(await readText(fileName));
52+
53+
expect(row).toContain(`**${EXPECTED_TOOL_COUNT}**`);
54+
expect(row).not.toContain("**17**");
55+
}
56+
});
57+
});

0 commit comments

Comments
 (0)