diff --git a/src/services/mcp-compatibility.ts b/src/services/mcp-compatibility.ts index 12e38a9bfb..94e1d757c1 100644 --- a/src/services/mcp-compatibility.ts +++ b/src/services/mcp-compatibility.ts @@ -59,7 +59,10 @@ export function classifyMcpClientVersion(version: string | null | undefined): Mc const minimumComparison = compareMcpSemver(version, MINIMUM_SUPPORTED_MCP_VERSION); if (minimumComparison === null) return "unknown"; if (minimumComparison < 0) return "incompatible"; - return "current"; + // A version at/above the minimum but below the latest recommended is supported-but-behind → "stale". + // (The flat "current" was correct only while MINIMUM === LATEST_RECOMMENDED; #745 reopened the gap.) + const latestComparison = compareMcpSemver(version, LATEST_RECOMMENDED_MCP_VERSION)!; + return latestComparison < 0 ? "stale" : "current"; } function parseSemver(version: string) { diff --git a/test/unit/mcp-compatibility.test.ts b/test/unit/mcp-compatibility.test.ts index 346d0239da..131e317235 100644 --- a/test/unit/mcp-compatibility.test.ts +++ b/test/unit/mcp-compatibility.test.ts @@ -8,7 +8,12 @@ describe("MCP compatibility telemetry", () => { expect(classifyMcpClientVersion("0.2.1")).toBe("incompatible"); expect(classifyMcpClientVersion("0.3.0")).toBe("incompatible"); expect(classifyMcpClientVersion("0.4.0")).toBe("incompatible"); - expect(classifyMcpClientVersion("0.5.0")).toBe("current"); + // >= minimum (0.5.0) but < latest recommended (0.6.0) → supported-but-behind → "stale". + expect(classifyMcpClientVersion("0.5.0")).toBe("stale"); + expect(classifyMcpClientVersion("0.5.9")).toBe("stale"); + // At/above the latest recommended → "current". + expect(classifyMcpClientVersion("0.6.0")).toBe("current"); + expect(classifyMcpClientVersion("0.7.1")).toBe("current"); expect(classifyMcpClientVersion("not-a-version")).toBe("unknown"); expect(classifyMcpClientVersion(undefined)).toBe("unknown"); }); @@ -50,7 +55,7 @@ describe("MCP compatibility telemetry", () => { clientVersion: "0.5.0", metadata: { packageName: "@example/custom-mcp", - compatibilityStatus: "current", + compatibilityStatus: "stale", }, }); }); diff --git a/test/unit/mcp-server-telemetry.test.ts b/test/unit/mcp-server-telemetry.test.ts index f8e6dc5960..be49e01d74 100644 --- a/test/unit/mcp-server-telemetry.test.ts +++ b/test/unit/mcp-server-telemetry.test.ts @@ -57,7 +57,7 @@ describe("MCP server telemetry", () => { clientVersion: "0.5.0", metadata: expect.objectContaining({ toolName: "gittensory_local_status", - compatibilityStatus: "current", + compatibilityStatus: "stale", }), }), ]);