diff --git a/plugins/config-audit/scanners/lib/active-config-reader.mjs b/plugins/config-audit/scanners/lib/active-config-reader.mjs index 181d47d..b5e8442 100644 --- a/plugins/config-audit/scanners/lib/active-config-reader.mjs +++ b/plugins/config-audit/scanners/lib/active-config-reader.mjs @@ -599,13 +599,14 @@ export async function readActiveMcpServers(repoPath, claudeJsonSlice = null, plu // ~/.claude.json project slice for (const [name, def] of Object.entries(slice.mcpServers || {})) { + const toolCount = Array.isArray(def?.tools) ? def.tools.length : 0; out.push({ name, source: '~/.claude.json:projects', command: describeMcpCommand(def), enabled: !disabled.has(name), disabledBy: disabled.has(name) ? 'disabledMcpjsonServers' : null, - estimatedTokens: estimateTokens(0, 'item'), + estimatedTokens: estimateTokens(0, 'mcp', { toolCount }), }); } @@ -624,13 +625,14 @@ async function collectMcpFromFile(path, source, disabled, out) { const parsed = parseJson(content); if (!parsed || !parsed.mcpServers || typeof parsed.mcpServers !== 'object') return; for (const [name, def] of Object.entries(parsed.mcpServers)) { + const toolCount = Array.isArray(def?.tools) ? def.tools.length : 0; out.push({ name, source, command: describeMcpCommand(def), enabled: !disabled.has(name), disabledBy: disabled.has(name) ? 'disabledMcpjsonServers' : null, - estimatedTokens: estimateTokens(0, 'item'), + estimatedTokens: estimateTokens(0, 'mcp', { toolCount }), }); } } diff --git a/plugins/config-audit/tests/lib/active-config-reader.test.mjs b/plugins/config-audit/tests/lib/active-config-reader.test.mjs index e181fef..bea8aaa 100644 --- a/plugins/config-audit/tests/lib/active-config-reader.test.mjs +++ b/plugins/config-audit/tests/lib/active-config-reader.test.mjs @@ -528,6 +528,15 @@ describe('readActiveMcpServers', () => { assert.equal(alpha.enabled, true); assert.equal(alpha.disabledBy, null); }); + + it('estimatedTokens >= 500 for every MCP server (v5 F2)', async () => { + const servers = await readActiveMcpServers(fixture.root); + assert.ok(servers.length > 0, 'fixture should produce MCP servers'); + for (const s of servers) { + assert.ok(s.estimatedTokens >= 500, + `${s.name} from ${s.source} has estimatedTokens=${s.estimatedTokens}, expected >= 500`); + } + }); }); // ─────────────────────────────────────────────────────────────────────────