diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 24b9279..84a54d3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -104,6 +104,15 @@ jobs: `server.json name: expected ${process.env.MCP_SERVER_NAME}, received ${String(server.name)}`, ); } + if ( + typeof server.description !== "string" || + server.description.trim().length === 0 || + server.description.length > 100 + ) { + errors.push( + `server.json description must contain 1-100 characters; received ${String(server.description).length}`, + ); + } const npmPackage = server.packages?.find( (entry) => diff --git a/CHANGELOG.md b/CHANGELOG.md index b099540..0bca431 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to FixMap are documented here. +## 0.6.1 - 2026-07-22 + +### Fixed + +- Shortened the MCP Registry description to its 100-character limit so the official registry publication can complete. +- Added a repository CI check and release preflight validation for MCP server metadata, preventing registry-only constraints from failing after npm packages have already published. + ## 0.6.0 - 2026-07-22 ### Added diff --git a/README.md b/README.md index 73f5681..7330f4e 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ jobs: with: fetch-depth: 0 - id: fixmap - uses: aryamthecodebreaker/FixMap@v0.6.0 + uses: aryamthecodebreaker/FixMap@v0.6.1 with: github-token: ${{ secrets.GITHUB_TOKEN }} ``` diff --git a/package-lock.json b/package-lock.json index 9f64042..8b26117 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "fixmap-workspace", - "version": "0.6.0", + "version": "0.6.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "fixmap-workspace", - "version": "0.6.0", + "version": "0.6.1", "license": "MIT", "workspaces": [ "packages/*", @@ -8485,18 +8485,18 @@ }, "packages/action": { "name": "@fixmap/action", - "version": "0.6.0", + "version": "0.6.1", "license": "MIT", "dependencies": { - "@aryam/fixmap-core": "0.6.0" + "@aryam/fixmap-core": "0.6.1" } }, "packages/cli": { "name": "@aryam/fixmap", - "version": "0.6.0", + "version": "0.6.1", "license": "MIT", "dependencies": { - "@aryam/fixmap-core": "0.6.0", + "@aryam/fixmap-core": "0.6.1", "@modelcontextprotocol/sdk": "^1.29.0" }, "bin": { @@ -8508,7 +8508,7 @@ }, "packages/core": { "name": "@aryam/fixmap-core", - "version": "0.6.0", + "version": "0.6.1", "license": "MIT", "devDependencies": {} } diff --git a/package.json b/package.json index b5de2f2..6fade2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fixmap-workspace", - "version": "0.6.0", + "version": "0.6.1", "private": true, "description": "Local-first repo context for coding agents: paste a GitHub issue URL to get ranked files, test routes, and risks.", "license": "MIT", @@ -43,9 +43,10 @@ "build:web": "npm run build -w @fixmap/web", "check:action-bundle": "npm run build:action && git diff --exit-code packages/action/dist/index.mjs", "check:action-metadata": "node scripts/check-action-metadata.mjs", + "check:server-manifest": "node scripts/check-server-manifest.mjs", "benchmark:scan": "npm run build:core && node scripts/benchmark-scan.mjs", "benchmark:check": "npm run build:core && node scripts/benchmark-scan.mjs --tier 1000 --check", - "ci": "npm run typecheck && npm test && npm run lint && npm run build && npm run check:action-metadata && npm run check:action-bundle && npm run smoke && npm run evaluate && npm run benchmark:check", + "ci": "npm run typecheck && npm test && npm run lint && npm run build && npm run check:action-metadata && npm run check:server-manifest && npm run check:action-bundle && npm run smoke && npm run evaluate && npm run benchmark:check", "evaluate": "npm run build:core && node scripts/evaluate.mjs", "evaluate:external": "npm run build:core && node scripts/evaluate-external.mjs", "evaluate:external:record": "npm run build:core && node scripts/evaluate-external.mjs --record", diff --git a/packages/action/package.json b/packages/action/package.json index 4f460b9..bbea09e 100644 --- a/packages/action/package.json +++ b/packages/action/package.json @@ -1,6 +1,6 @@ { "name": "@fixmap/action", - "version": "0.6.0", + "version": "0.6.1", "description": "GitHub Action wrapper for FixMap pull request reports.", "private": true, "license": "MIT", @@ -10,6 +10,6 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@aryam/fixmap-core": "0.6.0" + "@aryam/fixmap-core": "0.6.1" } } diff --git a/packages/cli/package.json b/packages/cli/package.json index 3d6bab0..074a31d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@aryam/fixmap", - "version": "0.6.0", + "version": "0.6.1", "mcpName": "io.github.aryamthecodebreaker/fixmap", "description": "Local-first CLI and MCP server mapping GitHub issue URLs, tasks, and diffs to ranked files, tests, and risks.", "license": "MIT", @@ -40,7 +40,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@aryam/fixmap-core": "0.6.0", + "@aryam/fixmap-core": "0.6.1", "@modelcontextprotocol/sdk": "^1.29.0" }, "engines": { diff --git a/packages/core/package.json b/packages/core/package.json index f30d25f..38dd012 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@aryam/fixmap-core", - "version": "0.6.0", + "version": "0.6.1", "description": "Deterministic local-first repository scanner, context ranker, and report renderer for coding agents.", "license": "MIT", "repository": { diff --git a/scripts/check-server-manifest.mjs b/scripts/check-server-manifest.mjs new file mode 100644 index 0000000..685f273 --- /dev/null +++ b/scripts/check-server-manifest.mjs @@ -0,0 +1,50 @@ +import { readFileSync } from "node:fs"; + +const readJson = (path) => JSON.parse(readFileSync(path, "utf8")); + +const server = readJson("server.json"); +const cli = readJson("packages/cli/package.json"); +const errors = []; + +if (server.name !== cli.mcpName) { + errors.push(`server name must match CLI mcpName (${cli.mcpName})`); +} + +if ( + typeof server.description !== "string" || + server.description.trim().length === 0 || + server.description.length > 100 +) { + errors.push( + `server description must contain 1-100 characters; received ${String(server.description).length}` + ); +} + +if (server.version !== cli.version) { + errors.push(`server version ${server.version} must match CLI version ${cli.version}`); +} + +const npmPackage = server.packages?.find( + (entry) => + entry.registryType === "npm" && + entry.identifier === cli.name +); + +if (!npmPackage) { + errors.push(`server packages must include npm package ${cli.name}`); +} else if (npmPackage.version !== cli.version) { + errors.push( + `server npm package version ${npmPackage.version} must match CLI version ${cli.version}` + ); +} + +if (errors.length > 0) { + for (const error of errors) { + console.error(`Server manifest check failed: ${error}`); + } + process.exit(1); +} + +console.log( + `Server manifest is valid: ${server.name}@${server.version} (${server.description.length}/100 description characters).` +); diff --git a/server.json b/server.json index 9a84caa..7501e3a 100644 --- a/server.json +++ b/server.json @@ -1,17 +1,17 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.aryamthecodebreaker/fixmap", - "description": "Deterministic local-first repo context for coding agents, including one-command public GitHub issue analysis.", + "description": "Deterministic local-first repo context for coding agents with one-command GitHub issue analysis.", "repository": { "url": "https://github.com/aryamthecodebreaker/FixMap", "source": "github" }, - "version": "0.6.0", + "version": "0.6.1", "packages": [ { "registryType": "npm", "identifier": "@aryam/fixmap", - "version": "0.6.0", + "version": "0.6.1", "transport": { "type": "stdio" },