feat: add configurable MCP tool loading to reduce LLM context usage (#1181)
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
This commit is contained in:
123
tests/helpers/tool-counts.js
Normal file
123
tests/helpers/tool-counts.js
Normal file
@@ -0,0 +1,123 @@
|
||||
/**
|
||||
* tool-counts.js
|
||||
* Shared helper for validating tool counts across tests and validation scripts
|
||||
*/
|
||||
|
||||
import {
|
||||
getToolCounts,
|
||||
getToolCategories
|
||||
} from '../../mcp-server/src/tools/tool-registry.js';
|
||||
|
||||
/**
|
||||
* Expected tool counts - update these when tools are added/removed
|
||||
* These serve as the canonical source of truth for expected counts
|
||||
*/
|
||||
export const EXPECTED_TOOL_COUNTS = {
|
||||
core: 7,
|
||||
standard: 15,
|
||||
total: 36
|
||||
};
|
||||
|
||||
/**
|
||||
* Expected core tools list for validation
|
||||
*/
|
||||
export const EXPECTED_CORE_TOOLS = [
|
||||
'get_tasks',
|
||||
'next_task',
|
||||
'get_task',
|
||||
'set_task_status',
|
||||
'update_subtask',
|
||||
'parse_prd',
|
||||
'expand_task'
|
||||
];
|
||||
|
||||
/**
|
||||
* Validate that actual tool counts match expected counts
|
||||
* @returns {Object} Validation result with isValid flag and details
|
||||
*/
|
||||
export function validateToolCounts() {
|
||||
const actual = getToolCounts();
|
||||
const expected = EXPECTED_TOOL_COUNTS;
|
||||
|
||||
const isValid =
|
||||
actual.core === expected.core &&
|
||||
actual.standard === expected.standard &&
|
||||
actual.total === expected.total;
|
||||
|
||||
return {
|
||||
isValid,
|
||||
actual,
|
||||
expected,
|
||||
differences: {
|
||||
core: actual.core - expected.core,
|
||||
standard: actual.standard - expected.standard,
|
||||
total: actual.total - expected.total
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that tool categories have correct structure and content
|
||||
* @returns {Object} Validation result
|
||||
*/
|
||||
export function validateToolStructure() {
|
||||
const categories = getToolCategories();
|
||||
const counts = getToolCounts();
|
||||
|
||||
// Check that core tools are subset of standard tools
|
||||
const coreInStandard = categories.core.every((tool) =>
|
||||
categories.standard.includes(tool)
|
||||
);
|
||||
|
||||
// Check that standard tools are subset of all tools
|
||||
const standardInAll = categories.standard.every((tool) =>
|
||||
categories.all.includes(tool)
|
||||
);
|
||||
|
||||
// Check that expected core tools match actual
|
||||
const expectedCoreMatch =
|
||||
EXPECTED_CORE_TOOLS.every((tool) => categories.core.includes(tool)) &&
|
||||
categories.core.every((tool) => EXPECTED_CORE_TOOLS.includes(tool));
|
||||
|
||||
// Check array lengths match counts
|
||||
const lengthsMatch =
|
||||
categories.core.length === counts.core &&
|
||||
categories.standard.length === counts.standard &&
|
||||
categories.all.length === counts.total;
|
||||
|
||||
return {
|
||||
isValid:
|
||||
coreInStandard && standardInAll && expectedCoreMatch && lengthsMatch,
|
||||
details: {
|
||||
coreInStandard,
|
||||
standardInAll,
|
||||
expectedCoreMatch,
|
||||
lengthsMatch
|
||||
},
|
||||
categories,
|
||||
counts
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a detailed report of all tool information
|
||||
* @returns {Object} Comprehensive tool information
|
||||
*/
|
||||
export function getToolReport() {
|
||||
const counts = getToolCounts();
|
||||
const categories = getToolCategories();
|
||||
const validation = validateToolCounts();
|
||||
const structure = validateToolStructure();
|
||||
|
||||
return {
|
||||
counts,
|
||||
categories,
|
||||
validation,
|
||||
structure,
|
||||
summary: {
|
||||
totalValid: validation.isValid && structure.isValid,
|
||||
countsValid: validation.isValid,
|
||||
structureValid: structure.isValid
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user