framework-mcp
Version:
Pure Data Provider architecture serving authentic CIS Controls Framework data via MCP and HTTP API. Empowers LLMs with authoritative safeguards data for analysis. Supports Microsoft Copilot custom connectors and DigitalOcean App Services deployment.
89 lines (72 loc) ⢠2.7 kB
JavaScript
/**
* Safeguard Count and Validation Script
*/
const fs = require('fs');
console.log('š¢ CIS Safeguards Count and Validation\n');
const originalData = fs.readFileSync('/tmp/complete_cis_safeguards.ts', 'utf8');
// Extract all safeguard IDs using regex
const safeguardPattern = /"(\d+\.\d+)":\s*{/g;
const safeguardIds = [];
let match;
while ((match = safeguardPattern.exec(originalData)) !== null) {
safeguardIds.push(match[1]);
}
console.log('š Safeguard Count Analysis:');
console.log(` Total safeguards found: ${safeguardIds.length}`);
// Sort safeguards numerically
const sortedIds = safeguardIds.sort((a, b) => {
const [aMajor, aMinor] = a.split('.').map(Number);
const [bMajor, bMinor] = b.split('.').map(Number);
return aMajor - bMajor || aMinor - bMinor;
});
console.log(` First safeguard: ${sortedIds[0]}`);
console.log(` Last safeguard: ${sortedIds[sortedIds.length - 1]}`);
// Check for duplicates
const duplicates = safeguardIds.filter((id, index) => safeguardIds.indexOf(id) !== index);
if (duplicates.length > 0) {
console.log('ā Duplicate safeguards found:', duplicates);
} else {
console.log('ā
No duplicate safeguards');
}
// Group by control
const byControl = {};
sortedIds.forEach(id => {
const control = id.split('.')[0];
if (!byControl[control]) byControl[control] = [];
byControl[control].push(id);
});
console.log('\nš Safeguards by Control:');
for (let i = 1; i <= 18; i++) {
const controlSafeguards = byControl[i.toString()] || [];
console.log(` Control ${i}: ${controlSafeguards.length} safeguards`);
if (controlSafeguards.length > 0) {
console.log(` Range: ${controlSafeguards[0]} - ${controlSafeguards[controlSafeguards.length - 1]}`);
}
}
// Validate expected total
const expectedTotal = 153;
console.log('\nšÆ Validation Results:');
console.log(` Expected: ${expectedTotal} safeguards`);
console.log(` Found: ${safeguardIds.length} safeguards`);
if (safeguardIds.length === expectedTotal) {
console.log('ā
Perfect count match!');
} else {
console.log(`ā Count mismatch: ${safeguardIds.length - expectedTotal} difference`);
}
// Check for missing controls
const missingControls = [];
for (let i = 1; i <= 18; i++) {
if (!byControl[i.toString()] || byControl[i.toString()].length === 0) {
missingControls.push(i);
}
}
if (missingControls.length === 0) {
console.log('ā
All 18 CIS Controls represented');
} else {
console.log('ā Missing controls:', missingControls);
}
console.log('\nš Sample safeguards:');
sortedIds.slice(0, 5).forEach(id => console.log(` - ${id}`));
console.log(' ...');
sortedIds.slice(-5).forEach(id => console.log(` - ${id}`));