@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
80 lines • 9.68 kB
JavaScript
import { OperationMetricsTracker } from '../OperationMetricsTracker.js';
export class OperationMetricsCollector {
tracker;
name = 'operation-metrics';
description = 'MCP-AQL operation counts, durations, and endpoint breakdown.';
constructor(tracker) {
this.tracker = tracker;
}
collect() {
try {
const m = this.tracker.getMetrics();
const pct = OperationMetricsTracker.percentiles(m.durations);
const entries = [
{
type: 'counter',
name: 'mcpaql.operations_total',
source: 'OperationMetricsTracker',
unit: 'operations',
description: 'Total MCP-AQL operations executed.',
value: m.totalOps,
},
{
type: 'counter',
name: 'mcpaql.operations_failed_total',
source: 'OperationMetricsTracker',
unit: 'operations',
description: 'Total MCP-AQL operations that failed.',
value: m.failedOps,
},
{
type: 'histogram',
name: 'mcpaql.duration',
source: 'OperationMetricsTracker',
unit: 'milliseconds',
description: 'MCP-AQL operation duration distribution.',
value: {
count: pct.count,
sum: pct.sum,
avg: pct.avg,
p50: pct.p50,
p95: pct.p95,
p99: pct.p99,
},
},
];
// Per-endpoint gauges
for (const [endpoint, count] of m.byEndpoint) {
entries.push({
type: 'gauge',
name: 'mcpaql.by_endpoint',
source: 'OperationMetricsTracker',
unit: 'operations',
description: `Operations via ${endpoint} endpoint.`,
labels: { endpoint },
value: count,
});
}
// Top 10 operations by count
const topOps = [...m.byOperation.entries()]
.sort((a, b) => b[1] - a[1])
.slice(0, 10);
for (const [operation, count] of topOps) {
entries.push({
type: 'gauge',
name: 'mcpaql.by_operation',
source: 'OperationMetricsTracker',
unit: 'operations',
description: `Count for operation: ${operation}.`,
labels: { operation },
value: count,
});
}
return entries;
}
catch {
return [];
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uTWV0cmljc0NvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZXRyaWNzL2NvbGxlY3RvcnMvT3BlcmF0aW9uTWV0cmljc0NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RSxNQUFNLE9BQU8seUJBQXlCO0lBSVA7SUFIcEIsSUFBSSxHQUFHLG1CQUFtQixDQUFDO0lBQzNCLFdBQVcsR0FBRyw4REFBOEQsQ0FBQztJQUV0RixZQUE2QixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtJQUFHLENBQUM7SUFFakUsT0FBTztRQUNMLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU3RCxNQUFNLE9BQU8sR0FBa0I7Z0JBQzdCO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLHlCQUF5QjtvQkFDL0IsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsb0NBQW9DO29CQUNqRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVE7aUJBQ2xCO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFrQjtvQkFDeEIsSUFBSSxFQUFFLGdDQUFnQztvQkFDdEMsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVM7aUJBQ25CO2dCQUNEO29CQUNFLElBQUksRUFBRSxXQUFvQjtvQkFDMUIsSUFBSSxFQUFFLGlCQUFpQjtvQkFDdkIsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLGNBQXVCO29CQUM3QixXQUFXLEVBQUUsMENBQTBDO29CQUN2RCxLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO3dCQUNoQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7d0JBQ1osR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO3dCQUNaLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRzt3QkFDWixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7d0JBQ1osR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO3FCQUNiO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLHNCQUFzQjtZQUN0QixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLElBQUksRUFBRSxPQUFnQjtvQkFDdEIsSUFBSSxFQUFFLG9CQUFvQjtvQkFDMUIsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsSUFBSSxFQUFFLFlBQXFCO29CQUMzQixXQUFXLEVBQUUsa0JBQWtCLFFBQVEsWUFBWTtvQkFDbkQsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFO29CQUNwQixLQUFLLEVBQUUsS0FBSztpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsNkJBQTZCO1lBQzdCLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQixLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxJQUFJLEVBQUUsT0FBZ0I7b0JBQ3RCLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLE1BQU0sRUFBRSx5QkFBeUI7b0JBQ2pDLElBQUksRUFBRSxZQUFxQjtvQkFDM0IsV0FBVyxFQUFFLHdCQUF3QixTQUFTLEdBQUc7b0JBQ2pELE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRTtvQkFDckIsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3RvciBmb3IgTUNQLUFRTCBvcGVyYXRpb24gbWV0cmljcy5cbiAqXG4gKiBSZWFkcyBmcm9tIE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIGFuZCBlbWl0cyBjb3VudGVyLCBoaXN0b2dyYW0sXG4gKiBhbmQgZ2F1Z2UgbWV0cmljIGVudHJpZXMgZm9yIHRoZSBNZXRyaWNzTWFuYWdlciBwaXBlbGluZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBJTWV0cmljQ29sbGVjdG9yLCBNZXRyaWNFbnRyeSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyIH0gZnJvbSAnLi4vT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uTWV0cmljc0NvbGxlY3RvciBpbXBsZW1lbnRzIElNZXRyaWNDb2xsZWN0b3Ige1xuICByZWFkb25seSBuYW1lID0gJ29wZXJhdGlvbi1tZXRyaWNzJztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSAnTUNQLUFRTCBvcGVyYXRpb24gY291bnRzLCBkdXJhdGlvbnMsIGFuZCBlbmRwb2ludCBicmVha2Rvd24uJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRyYWNrZXI6IE9wZXJhdGlvbk1ldHJpY3NUcmFja2VyKSB7fVxuXG4gIGNvbGxlY3QoKTogTWV0cmljRW50cnlbXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLnRyYWNrZXIuZ2V0TWV0cmljcygpO1xuICAgICAgY29uc3QgcGN0ID0gT3BlcmF0aW9uTWV0cmljc1RyYWNrZXIucGVyY2VudGlsZXMobS5kdXJhdGlvbnMpO1xuXG4gICAgICBjb25zdCBlbnRyaWVzOiBNZXRyaWNFbnRyeVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdtY3BhcWwub3BlcmF0aW9uc190b3RhbCcsXG4gICAgICAgICAgc291cmNlOiAnT3BlcmF0aW9uTWV0cmljc1RyYWNrZXInLFxuICAgICAgICAgIHVuaXQ6ICdvcGVyYXRpb25zJyBhcyBjb25zdCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIE1DUC1BUUwgb3BlcmF0aW9ucyBleGVjdXRlZC4nLFxuICAgICAgICAgIHZhbHVlOiBtLnRvdGFsT3BzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvdW50ZXInIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdtY3BhcWwub3BlcmF0aW9uc19mYWlsZWRfdG90YWwnLFxuICAgICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBNQ1AtQVFMIG9wZXJhdGlvbnMgdGhhdCBmYWlsZWQuJyxcbiAgICAgICAgICB2YWx1ZTogbS5mYWlsZWRPcHMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnaGlzdG9ncmFtJyBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiAnbWNwYXFsLmR1cmF0aW9uJyxcbiAgICAgICAgICBzb3VyY2U6ICdPcGVyYXRpb25NZXRyaWNzVHJhY2tlcicsXG4gICAgICAgICAgdW5pdDogJ21pbGxpc2Vjb25kcycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdNQ1AtQVFMIG9wZXJhdGlvbiBkdXJhdGlvbiBkaXN0cmlidXRpb24uJyxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgY291bnQ6IHBjdC5jb3VudCxcbiAgICAgICAgICAgIHN1bTogcGN0LnN1bSxcbiAgICAgICAgICAgIGF2ZzogcGN0LmF2ZyxcbiAgICAgICAgICAgIHA1MDogcGN0LnA1MCxcbiAgICAgICAgICAgIHA5NTogcGN0LnA5NSxcbiAgICAgICAgICAgIHA5OTogcGN0LnA5OSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgLy8gUGVyLWVuZHBvaW50IGdhdWdlc1xuICAgICAgZm9yIChjb25zdCBbZW5kcG9pbnQsIGNvdW50XSBvZiBtLmJ5RW5kcG9pbnQpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnZ2F1Z2UnIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6ICdtY3BhcWwuYnlfZW5kcG9pbnQnLFxuICAgICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBPcGVyYXRpb25zIHZpYSAke2VuZHBvaW50fSBlbmRwb2ludC5gLFxuICAgICAgICAgIGxhYmVsczogeyBlbmRwb2ludCB9LFxuICAgICAgICAgIHZhbHVlOiBjb3VudCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRvcCAxMCBvcGVyYXRpb25zIGJ5IGNvdW50XG4gICAgICBjb25zdCB0b3BPcHMgPSBbLi4ubS5ieU9wZXJhdGlvbi5lbnRyaWVzKCldXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzFdIC0gYVsxXSlcbiAgICAgICAgLnNsaWNlKDAsIDEwKTtcbiAgICAgIGZvciAoY29uc3QgW29wZXJhdGlvbiwgY291bnRdIG9mIHRvcE9wcykge1xuICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdnYXVnZScgYXMgY29uc3QsXG4gICAgICAgICAgbmFtZTogJ21jcGFxbC5ieV9vcGVyYXRpb24nLFxuICAgICAgICAgIHNvdXJjZTogJ09wZXJhdGlvbk1ldHJpY3NUcmFja2VyJyxcbiAgICAgICAgICB1bml0OiAnb3BlcmF0aW9ucycgYXMgY29uc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBDb3VudCBmb3Igb3BlcmF0aW9uOiAke29wZXJhdGlvbn0uYCxcbiAgICAgICAgICBsYWJlbHM6IHsgb3BlcmF0aW9uIH0sXG4gICAgICAgICAgdmFsdWU6IGNvdW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG59XG4iXX0=