framework-mcp 1.3.7 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COPILOT_INTEGRATION.md +49 -62
- package/DEPLOYMENT_GUIDE.md +46 -47
- package/MCP_INTEGRATION_GUIDE.md +96 -129
- package/MIGRATION_GUIDE_v1.4.0.md +190 -0
- package/README.md +148 -173
- package/RELEASE_NOTES_v1.4.0.md +178 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/http/http-server.d.ts +0 -4
- package/dist/interfaces/http/http-server.d.ts.map +1 -1
- package/dist/interfaces/http/http-server.js +6 -85
- package/dist/interfaces/http/http-server.js.map +1 -1
- package/dist/interfaces/mcp/mcp-server.d.ts +0 -4
- package/dist/interfaces/mcp/mcp-server.d.ts.map +1 -1
- package/dist/interfaces/mcp/mcp-server.js +4 -71
- package/dist/interfaces/mcp/mcp-server.js.map +1 -1
- package/examples/llm-analysis-patterns.md +553 -0
- package/package.json +2 -2
- package/scripts/validate-documentation.sh +4 -4
- package/src/index.ts +1 -2
- package/src/interfaces/http/http-server.ts +6 -101
- package/src/interfaces/mcp/mcp-server.ts +4 -85
- package/swagger.json +7 -167
- package/dist/core/capability-analyzer.d.ts +0 -23
- package/dist/core/capability-analyzer.d.ts.map +0 -1
- package/dist/core/capability-analyzer.js +0 -333
- package/dist/core/capability-analyzer.js.map +0 -1
- package/src/core/capability-analyzer.ts +0 -417
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
export class CapabilityAnalyzer {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.cache = new Map();
|
|
4
|
-
this.performanceMetrics = {
|
|
5
|
-
uptime: Date.now(),
|
|
6
|
-
totalRequests: 0,
|
|
7
|
-
errorCount: 0,
|
|
8
|
-
requestCounts: new Map(),
|
|
9
|
-
executionTimes: new Map(),
|
|
10
|
-
lastStatsLog: Date.now()
|
|
11
|
-
};
|
|
12
|
-
// Set up periodic cache cleanup
|
|
13
|
-
setInterval(() => {
|
|
14
|
-
this.cleanupExpiredCache();
|
|
15
|
-
}, 10 * 60 * 1000); // Every 10 minutes
|
|
16
|
-
}
|
|
17
|
-
performCapabilityAnalysis(vendorName, safeguard, responseText) {
|
|
18
|
-
const startTime = Date.now();
|
|
19
|
-
try {
|
|
20
|
-
this.performanceMetrics.totalRequests++;
|
|
21
|
-
const text = responseText.toLowerCase();
|
|
22
|
-
// Step 1: Determine what type of capability this tool is claiming
|
|
23
|
-
const claimedCapability = this.determineClaimedCapability(text, safeguard);
|
|
24
|
-
// Step 2: Assess how well the tool executes that specific capability type
|
|
25
|
-
const qualityAssessment = this.assessCapabilityQuality(text, safeguard, claimedCapability);
|
|
26
|
-
// Step 3: Generate capability-focused analysis
|
|
27
|
-
const result = this.generateCapabilityAnalysis(vendorName, safeguard, responseText, claimedCapability, qualityAssessment);
|
|
28
|
-
// Record performance metrics
|
|
29
|
-
this.recordToolExecution('performCapabilityAnalysis', Date.now() - startTime);
|
|
30
|
-
return result;
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
this.performanceMetrics.errorCount++;
|
|
34
|
-
this.recordToolExecution('performCapabilityAnalysis_error', Date.now() - startTime);
|
|
35
|
-
throw error;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
determineClaimedCapability(text, safeguard) {
|
|
39
|
-
// Capability detection keywords - focused on what the tool DOES, not what elements it covers
|
|
40
|
-
const governanceIndicators = [
|
|
41
|
-
'policy', 'policies', 'manage', 'process', 'workflow', 'governance', 'grc',
|
|
42
|
-
'compliance management', 'documented', 'establish', 'maintain', 'procedure',
|
|
43
|
-
'control', 'controls', 'framework', 'standard', 'enterprise risk management',
|
|
44
|
-
'centralized management', 'oversight'
|
|
45
|
-
];
|
|
46
|
-
const facilitatesIndicators = [
|
|
47
|
-
'improve', 'enhance', 'optimize', 'faster', 'better', 'stronger', 'automate',
|
|
48
|
-
'streamline', 'efficiency', 'facilitate', 'support', 'enable', 'accelerate',
|
|
49
|
-
'api', 'integration', 'data', 'export', 'import', 'sync', 'feed',
|
|
50
|
-
'provides data', 'data source', 'data feeds', 'enrichment', 'data enrichment',
|
|
51
|
-
'supplemental data', 'additional data', 'contextual data', 'threat data',
|
|
52
|
-
'intelligence feeds', 'data aggregation', 'data collection', 'data gathering',
|
|
53
|
-
'feeds data', 'populates', 'informs', 'enriches', 'supplements',
|
|
54
|
-
'enables compliance', 'facilitates implementation', 'supports compliance',
|
|
55
|
-
'creates framework', 'enables organizations', 'infrastructure', 'foundation',
|
|
56
|
-
'template', 'templates', 'workflow automation', 'orchestration'
|
|
57
|
-
];
|
|
58
|
-
const validatesIndicators = [
|
|
59
|
-
'audit', 'report', 'evidence', 'verify', 'validate', 'check', 'monitor',
|
|
60
|
-
'compliance', 'compliance report', 'assessment', 'logging', 'tracking', 'review', 'attest',
|
|
61
|
-
'dashboard', 'metrics', 'analytics', 'visibility', 'alert', 'attestation',
|
|
62
|
-
'compliance tracking', 'audit trail', 'reporting capabilities', 'audit capabilities'
|
|
63
|
-
];
|
|
64
|
-
// General implementation indicators for all safeguards
|
|
65
|
-
const implementationIndicators = [
|
|
66
|
-
'implement', 'implements', 'implementation', 'deploy', 'execute', 'perform',
|
|
67
|
-
'provides', 'delivers', 'complete', 'fully', 'comprehensive', 'directly',
|
|
68
|
-
'natively', 'built-in', 'core functionality', 'primary function', 'main feature'
|
|
69
|
-
];
|
|
70
|
-
// Calculate keyword presence scores
|
|
71
|
-
const governanceScore = this.calculateKeywordScore(text, governanceIndicators);
|
|
72
|
-
const facilitatesScore = this.calculateKeywordScore(text, facilitatesIndicators);
|
|
73
|
-
const validatesScore = this.calculateKeywordScore(text, validatesIndicators);
|
|
74
|
-
const implementationScore = this.calculateKeywordScore(text, implementationIndicators);
|
|
75
|
-
// Determine claimed capability based on strongest indicators and patterns
|
|
76
|
-
if (implementationScore > 0.2 && implementationScore >= Math.max(facilitatesScore, governanceScore, validatesScore)) {
|
|
77
|
-
// Tool claims to directly implement the safeguard
|
|
78
|
-
return implementationScore > 0.5 ? 'full' : 'partial';
|
|
79
|
-
}
|
|
80
|
-
else if (governanceScore > 0.2 && governanceScore >= Math.max(facilitatesScore, validatesScore)) {
|
|
81
|
-
return 'governance';
|
|
82
|
-
}
|
|
83
|
-
else if (validatesScore > 0.2 && validatesScore >= facilitatesScore) {
|
|
84
|
-
return 'validates';
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
return 'facilitates';
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
assessCapabilityQuality(text, safeguard, claimedCapability) {
|
|
91
|
-
// Assess how well the tool executes the claimed capability type
|
|
92
|
-
const evidence = [];
|
|
93
|
-
const gaps = [];
|
|
94
|
-
// Quality assessment based on capability type
|
|
95
|
-
let qualityScore = 0;
|
|
96
|
-
switch (claimedCapability) {
|
|
97
|
-
case 'full':
|
|
98
|
-
case 'partial':
|
|
99
|
-
qualityScore = this.assessImplementationQuality(text, safeguard, evidence, gaps);
|
|
100
|
-
break;
|
|
101
|
-
case 'facilitates':
|
|
102
|
-
qualityScore = this.assessFacilitationQuality(text, evidence, gaps);
|
|
103
|
-
break;
|
|
104
|
-
case 'governance':
|
|
105
|
-
qualityScore = this.assessGovernanceQuality(text, evidence, gaps);
|
|
106
|
-
break;
|
|
107
|
-
case 'validates':
|
|
108
|
-
qualityScore = this.assessValidationQuality(text, evidence, gaps);
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
const quality = qualityScore >= 0.8 ? 'excellent' :
|
|
112
|
-
qualityScore >= 0.6 ? 'good' :
|
|
113
|
-
qualityScore >= 0.4 ? 'fair' : 'poor';
|
|
114
|
-
return {
|
|
115
|
-
quality,
|
|
116
|
-
confidence: Math.round(qualityScore * 100),
|
|
117
|
-
evidence,
|
|
118
|
-
gaps
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
assessImplementationQuality(text, safeguard, evidence, gaps) {
|
|
122
|
-
let score = 0;
|
|
123
|
-
// Check for core implementation elements
|
|
124
|
-
const coreScore = this.calculateElementCoverage(text, safeguard.coreRequirements);
|
|
125
|
-
const subElementScore = this.calculateElementCoverage(text, safeguard.subTaxonomicalElements);
|
|
126
|
-
const governanceScore = this.calculateElementCoverage(text, safeguard.governanceElements);
|
|
127
|
-
if (coreScore > 0.5) {
|
|
128
|
-
evidence.push('Strong coverage of core requirements');
|
|
129
|
-
score += 0.4;
|
|
130
|
-
}
|
|
131
|
-
else if (coreScore > 0.2) {
|
|
132
|
-
evidence.push('Partial coverage of core requirements');
|
|
133
|
-
score += 0.2;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
gaps.push('Limited coverage of core requirements');
|
|
137
|
-
}
|
|
138
|
-
if (subElementScore > 0.3) {
|
|
139
|
-
evidence.push('Good coverage of sub-taxonomical elements');
|
|
140
|
-
score += 0.3;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
gaps.push('Limited sub-element coverage');
|
|
144
|
-
}
|
|
145
|
-
if (governanceScore > 0.3) {
|
|
146
|
-
evidence.push('Addresses governance requirements');
|
|
147
|
-
score += 0.3;
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
gaps.push('Limited governance element coverage');
|
|
151
|
-
}
|
|
152
|
-
return Math.min(score, 1.0);
|
|
153
|
-
}
|
|
154
|
-
assessFacilitationQuality(text, evidence, gaps) {
|
|
155
|
-
let score = 0;
|
|
156
|
-
const facilitationKeywords = ['enhance', 'improve', 'optimize', 'enable', 'support', 'facilitate', 'streamline'];
|
|
157
|
-
const integrationKeywords = ['api', 'integration', 'data feed', 'export', 'import', 'sync'];
|
|
158
|
-
const automationKeywords = ['automate', 'automated', 'orchestration', 'workflow'];
|
|
159
|
-
if (this.calculateKeywordScore(text, facilitationKeywords) > 0.1) {
|
|
160
|
-
evidence.push('Clear facilitation capabilities');
|
|
161
|
-
score += 0.4;
|
|
162
|
-
}
|
|
163
|
-
if (this.calculateKeywordScore(text, integrationKeywords) > 0.1) {
|
|
164
|
-
evidence.push('Integration and data sharing capabilities');
|
|
165
|
-
score += 0.3;
|
|
166
|
-
}
|
|
167
|
-
if (this.calculateKeywordScore(text, automationKeywords) > 0.1) {
|
|
168
|
-
evidence.push('Automation and workflow capabilities');
|
|
169
|
-
score += 0.3;
|
|
170
|
-
}
|
|
171
|
-
if (score < 0.4) {
|
|
172
|
-
gaps.push('Limited evidence of facilitation capabilities');
|
|
173
|
-
}
|
|
174
|
-
return Math.min(score, 1.0);
|
|
175
|
-
}
|
|
176
|
-
assessGovernanceQuality(text, evidence, gaps) {
|
|
177
|
-
let score = 0;
|
|
178
|
-
const policyKeywords = ['policy', 'policies', 'procedure', 'standard', 'framework'];
|
|
179
|
-
const processKeywords = ['process', 'workflow', 'governance', 'management', 'oversight'];
|
|
180
|
-
const complianceKeywords = ['compliance', 'grc', 'audit', 'risk management'];
|
|
181
|
-
if (this.calculateKeywordScore(text, policyKeywords) > 0.1) {
|
|
182
|
-
evidence.push('Policy and procedure management');
|
|
183
|
-
score += 0.4;
|
|
184
|
-
}
|
|
185
|
-
if (this.calculateKeywordScore(text, processKeywords) > 0.1) {
|
|
186
|
-
evidence.push('Process and workflow capabilities');
|
|
187
|
-
score += 0.3;
|
|
188
|
-
}
|
|
189
|
-
if (this.calculateKeywordScore(text, complianceKeywords) > 0.1) {
|
|
190
|
-
evidence.push('Compliance and risk management features');
|
|
191
|
-
score += 0.3;
|
|
192
|
-
}
|
|
193
|
-
if (score < 0.4) {
|
|
194
|
-
gaps.push('Limited governance capabilities evident');
|
|
195
|
-
}
|
|
196
|
-
return Math.min(score, 1.0);
|
|
197
|
-
}
|
|
198
|
-
assessValidationQuality(text, evidence, gaps) {
|
|
199
|
-
let score = 0;
|
|
200
|
-
const auditKeywords = ['audit', 'audit trail', 'evidence', 'verification', 'validation'];
|
|
201
|
-
const reportingKeywords = ['report', 'reporting', 'dashboard', 'metrics', 'analytics'];
|
|
202
|
-
const monitoringKeywords = ['monitor', 'monitoring', 'tracking', 'logging', 'alerting'];
|
|
203
|
-
if (this.calculateKeywordScore(text, auditKeywords) > 0.1) {
|
|
204
|
-
evidence.push('Audit and evidence collection capabilities');
|
|
205
|
-
score += 0.4;
|
|
206
|
-
}
|
|
207
|
-
if (this.calculateKeywordScore(text, reportingKeywords) > 0.1) {
|
|
208
|
-
evidence.push('Reporting and analytics features');
|
|
209
|
-
score += 0.3;
|
|
210
|
-
}
|
|
211
|
-
if (this.calculateKeywordScore(text, monitoringKeywords) > 0.1) {
|
|
212
|
-
evidence.push('Monitoring and tracking capabilities');
|
|
213
|
-
score += 0.3;
|
|
214
|
-
}
|
|
215
|
-
if (score < 0.4) {
|
|
216
|
-
gaps.push('Limited validation and evidence capabilities');
|
|
217
|
-
}
|
|
218
|
-
return Math.min(score, 1.0);
|
|
219
|
-
}
|
|
220
|
-
generateCapabilityAnalysis(vendorName, safeguard, responseText, claimedCapability, qualityAssessment) {
|
|
221
|
-
const capabilities = {
|
|
222
|
-
full: claimedCapability === 'full',
|
|
223
|
-
partial: claimedCapability === 'partial',
|
|
224
|
-
facilitates: claimedCapability === 'facilitates',
|
|
225
|
-
governance: claimedCapability === 'governance',
|
|
226
|
-
validates: claimedCapability === 'validates'
|
|
227
|
-
};
|
|
228
|
-
const toolCapabilityDescription = this.generateToolCapabilityDescription(claimedCapability, qualityAssessment);
|
|
229
|
-
const recommendedUse = this.generateRecommendedUse(claimedCapability, safeguard);
|
|
230
|
-
return {
|
|
231
|
-
vendor: vendorName,
|
|
232
|
-
safeguardId: safeguard.id,
|
|
233
|
-
safeguardTitle: safeguard.title,
|
|
234
|
-
capability: claimedCapability,
|
|
235
|
-
capabilities,
|
|
236
|
-
confidence: qualityAssessment.confidence,
|
|
237
|
-
reasoning: `Primary capability: ${claimedCapability.toUpperCase()} (${qualityAssessment.quality} quality)`,
|
|
238
|
-
evidence: qualityAssessment.evidence,
|
|
239
|
-
toolCapabilityDescription,
|
|
240
|
-
recommendedUse
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
generateToolCapabilityDescription(capability, quality) {
|
|
244
|
-
const qualityDescriptions = {
|
|
245
|
-
excellent: 'comprehensive and well-implemented',
|
|
246
|
-
good: 'solid and effective',
|
|
247
|
-
fair: 'basic but functional',
|
|
248
|
-
poor: 'limited or unclear'
|
|
249
|
-
};
|
|
250
|
-
const capabilityDescriptions = {
|
|
251
|
-
full: 'directly implements the complete safeguard functionality',
|
|
252
|
-
partial: 'implements specific aspects of the safeguard with defined scope',
|
|
253
|
-
facilitates: 'enhances and enables safeguard implementation by other tools or processes',
|
|
254
|
-
governance: 'provides policy, process management, and oversight capabilities',
|
|
255
|
-
validates: 'provides evidence collection, audit, and compliance validation capabilities'
|
|
256
|
-
};
|
|
257
|
-
return `This tool ${capabilityDescriptions[capability]} with ${qualityDescriptions[quality.quality]} capabilities.`;
|
|
258
|
-
}
|
|
259
|
-
generateRecommendedUse(capability, safeguard) {
|
|
260
|
-
const recommendations = {
|
|
261
|
-
full: `Use as the primary implementation tool for ${safeguard.title}. Ensure comprehensive deployment and configuration.`,
|
|
262
|
-
partial: `Use as a component within a broader safeguard implementation strategy. Supplement with additional tools or processes.`,
|
|
263
|
-
facilitates: `Use to enhance and optimize existing safeguard implementation. Integrate with primary implementation tools.`,
|
|
264
|
-
governance: `Use for policy management, process oversight, and compliance framework establishment for ${safeguard.title}.`,
|
|
265
|
-
validates: `Use for evidence collection, audit preparation, and compliance validation of ${safeguard.title} implementation.`
|
|
266
|
-
};
|
|
267
|
-
return recommendations[capability];
|
|
268
|
-
}
|
|
269
|
-
calculateKeywordScore(text, keywords) {
|
|
270
|
-
let matches = 0;
|
|
271
|
-
for (const keyword of keywords) {
|
|
272
|
-
if (text.includes(keyword.toLowerCase())) {
|
|
273
|
-
matches++;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
return keywords.length > 0 ? matches / keywords.length : 0;
|
|
277
|
-
}
|
|
278
|
-
calculateElementCoverage(text, elements) {
|
|
279
|
-
let matches = 0;
|
|
280
|
-
for (const element of elements) {
|
|
281
|
-
if (text.includes(element.toLowerCase())) {
|
|
282
|
-
matches++;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return elements.length > 0 ? matches / elements.length : 0;
|
|
286
|
-
}
|
|
287
|
-
recordToolExecution(toolName, executionTime) {
|
|
288
|
-
// Update request count
|
|
289
|
-
const currentCount = this.performanceMetrics.requestCounts.get(toolName) || 0;
|
|
290
|
-
this.performanceMetrics.requestCounts.set(toolName, currentCount + 1);
|
|
291
|
-
// Update execution times (keep last 100 measurements for rolling average)
|
|
292
|
-
const times = this.performanceMetrics.executionTimes.get(toolName) || [];
|
|
293
|
-
times.push(executionTime);
|
|
294
|
-
if (times.length > 100) {
|
|
295
|
-
times.shift(); // Remove oldest measurement
|
|
296
|
-
}
|
|
297
|
-
this.performanceMetrics.executionTimes.set(toolName, times);
|
|
298
|
-
// Log performance stats every 5 minutes in production
|
|
299
|
-
if (process.env.NODE_ENV === 'production' &&
|
|
300
|
-
Date.now() - this.performanceMetrics.lastStatsLog > 5 * 60 * 1000) {
|
|
301
|
-
this.logPerformanceStats();
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
logPerformanceStats() {
|
|
305
|
-
const uptime = Math.round((Date.now() - this.performanceMetrics.uptime) / 1000);
|
|
306
|
-
const errorRate = (this.performanceMetrics.errorCount / this.performanceMetrics.totalRequests * 100).toFixed(1);
|
|
307
|
-
console.log(`[Framework MCP Performance] Uptime: ${uptime}s, Requests: ${this.performanceMetrics.totalRequests}, Error Rate: ${errorRate}%`);
|
|
308
|
-
// Log per-tool average execution times
|
|
309
|
-
for (const [toolName, times] of this.performanceMetrics.executionTimes.entries()) {
|
|
310
|
-
const avgTime = times.reduce((a, b) => a + b, 0) / times.length;
|
|
311
|
-
console.log(`[Framework MCP Performance] ${toolName}: ${Math.round(avgTime)}ms avg`);
|
|
312
|
-
}
|
|
313
|
-
this.performanceMetrics.lastStatsLog = Date.now();
|
|
314
|
-
}
|
|
315
|
-
cleanupExpiredCache() {
|
|
316
|
-
const now = Date.now();
|
|
317
|
-
const expiredKeys = [];
|
|
318
|
-
for (const [key, entry] of this.cache.entries()) {
|
|
319
|
-
// Cache TTL: 5 minutes for most entries
|
|
320
|
-
if (now - entry.timestamp > 5 * 60 * 1000) {
|
|
321
|
-
expiredKeys.push(key);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
expiredKeys.forEach(key => this.cache.delete(key));
|
|
325
|
-
if (expiredKeys.length > 0) {
|
|
326
|
-
console.log(`[Framework MCP Cache] Cleaned up ${expiredKeys.length} expired entries`);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
getPerformanceMetrics() {
|
|
330
|
-
return { ...this.performanceMetrics };
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
//# sourceMappingURL=capability-analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capability-analyzer.js","sourceRoot":"","sources":["../../src/core/capability-analyzer.ts"],"names":[],"mappings":"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"}
|