<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Smart Prompts MCP Test Results - 21/06/2025</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6;
color: #333;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background: #f5f5f5;
}
.header {
background: #2563eb;
color: white;
padding: 30px;
border-radius: 10px;
margin-bottom: 30px;
}
.header h1 {
margin: 0 0 10px 0;
}
.summary-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.card {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
text-align: center;
}
.card h3 {
margin: 0 0 10px 0;
color: #666;
font-size: 14px;
text-transform: uppercase;
}
.card .value {
font-size: 36px;
font-weight: bold;
margin: 0;
}
.passed { color: #10b981; }
.failed { color: #ef4444; }
.chart-container {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
margin-bottom: 30px;
}
.chart-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
}
table {
width: 100%;
background: white;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
margin-bottom: 30px;
}
th {
background: #f3f4f6;
padding: 12px;
text-align: left;
font-weight: 600;
}
td {
padding: 12px;
border-top: 1px solid #e5e7eb;
}
tr:hover {
background: #f9fafb;
}
.status-pass {
color: #10b981;
font-weight: 600;
}
.status-fail {
color: #ef4444;
font-weight: 600;
}
.footer {
text-align: center;
color: #666;
margin-top: 50px;
}
@media (max-width: 768px) {
.chart-grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="header">
<h1>Smart Prompts MCP Server Test Results</h1>
<p>Generated: 21/06/2025, 9:18:50 am</p>
<p>Environment: Node v22.14.0 on linux (x64)</p>
</div>
<div class="summary-cards">
<div class="card">
<h3>Total Tests</h3>
<p class="value">28</p>
</div>
<div class="card">
<h3>Passed</h3>
<p class="value passed">28</p>
</div>
<div class="card">
<h3>Failed</h3>
<p class="value failed">0</p>
</div>
<div class="card">
<h3>Success Rate</h3>
<p class="value">100%</p>
</div>
</div>
<div class="chart-container">
<h2>Test Results Overview</h2>
<div class="chart-grid">
<div>
<canvas id="testChart"></canvas>
</div>
<div>
<canvas id="performanceChart"></canvas>
</div>
</div>
</div>
<h2>Performance Statistics</h2>
<table>
<thead>
<tr>
<th>Tool</th>
<th>Calls</th>
<th>Average (ms)</th>
<th>Median</th>
<th>P95</th>
<th>P99</th>
<th>Max</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>search_prompts</strong></td>
<td>10</td>
<td>90</td>
<td>89</td>
<td>98</td>
<td>101</td>
<td>102</td>
</tr>
<tr>
<td><strong>list_prompt_categories</strong></td>
<td>10</td>
<td>54</td>
<td>54</td>
<td>59</td>
<td>60</td>
<td>61</td>
</tr>
<tr>
<td><strong>get_prompt</strong></td>
<td>10</td>
<td>104</td>
<td>104</td>
<td>115</td>
<td>118</td>
<td>119</td>
</tr>
<tr>
<td><strong>prompts_help</strong></td>
<td>10</td>
<td>22</td>
<td>22</td>
<td>24</td>
<td>25</td>
<td>25</td>
</tr>
<tr>
<td><strong>check_github_status</strong></td>
<td>10</td>
<td>152</td>
<td>152</td>
<td>165</td>
<td>167</td>
<td>168</td>
</tr>
<tr>
<td><strong>compose_prompts</strong></td>
<td>10</td>
<td>142</td>
<td>142</td>
<td>153</td>
<td>155</td>
<td>156</td>
</tr>
</tbody>
</table>
<h2>Test Details</h2>
<table>
<thead>
<tr>
<th>Test Name</th>
<th>Status</th>
<th>Duration (ms)</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>list_tools</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>45</td>
<td>-</td>
</tr>
<tr>
<td><strong>prompts_help</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>23</td>
<td>-</td>
</tr>
<tr>
<td><strong>check_github_status</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>156</td>
<td>-</td>
</tr>
<tr>
<td><strong>search_prompts_keyword</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>89</td>
<td>-</td>
</tr>
<tr>
<td><strong>search_prompts_category</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>72</td>
<td>-</td>
</tr>
<tr>
<td><strong>search_prompts_tag</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>68</td>
<td>-</td>
</tr>
<tr>
<td><strong>list_prompt_categories</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>54</td>
<td>-</td>
</tr>
<tr>
<td><strong>get_prompt</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>112</td>
<td>-</td>
</tr>
<tr>
<td><strong>get_prompt_not_found</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>31</td>
<td>-</td>
</tr>
<tr>
<td><strong>compose_prompts</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>145</td>
<td>-</td>
</tr>
<tr>
<td><strong>search_empty_query</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>28</td>
<td>-</td>
</tr>
<tr>
<td><strong>invalid_parameters</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>19</td>
<td>-</td>
</tr>
<tr>
<td><strong>search_special_chars</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>34</td>
<td>-</td>
</tr>
<tr>
<td><strong>concurrent_requests</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>287</td>
<td>-</td>
</tr>
<tr>
<td><strong>load_test</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>156</td>
<td>Avg: 156ms, Max: 243ms</td>
</tr>
<tr>
<td><strong>full_workflow</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>412</td>
<td>-</td>
</tr>
<tr>
<td><strong>cache_initialization</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>67</td>
<td>-</td>
</tr>
<tr>
<td><strong>github_authentication</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>98</td>
<td>-</td>
</tr>
<tr>
<td><strong>prompt_metadata_parsing</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>12</td>
<td>-</td>
</tr>
<tr>
<td><strong>handlebars_templating</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>8</td>
<td>-</td>
</tr>
<tr>
<td><strong>category_filtering</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>45</td>
<td>-</td>
</tr>
<tr>
<td><strong>tag_filtering</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>41</td>
<td>-</td>
</tr>
<tr>
<td><strong>search_ranking</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>52</td>
<td>-</td>
</tr>
<tr>
<td><strong>error_recovery</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>78</td>
<td>-</td>
</tr>
<tr>
<td><strong>rate_limit_handling</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>134</td>
<td>-</td>
</tr>
<tr>
<td><strong>cache_refresh</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>189</td>
<td>-</td>
</tr>
<tr>
<td><strong>prompt_creation</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>167</td>
<td>-</td>
</tr>
<tr>
<td><strong>prompt_validation</strong></td>
<td class="status-pass">
✅ Pass
</td>
<td>23</td>
<td>-</td>
</tr>
</tbody>
</table>
<div class="footer">
<p>Smart Prompts MCP Server - Test Report</p>
<p>All tests completed successfully with excellent performance metrics!</p>
</div>
<script>
// Test Results Pie Chart
const testCtx = document.getElementById('testChart').getContext('2d');
new Chart(testCtx, {
type: 'pie',
data: {
labels: ['Passed', 'Failed'],
datasets: [{
data: [28, 0],
backgroundColor: ['#10b981', '#ef4444']
}]
},
options: {
responsive: true,
plugins: {
title: {
display: true,
text: 'Test Results Distribution'
},
legend: {
position: 'bottom'
}
}
}
});
// Performance Bar Chart
const perfCtx = document.getElementById('performanceChart').getContext('2d');
const perfData = {"search_prompts":{"count":10,"average":90,"median":89,"min":68,"max":102,"p95":98,"p99":101},"list_prompt_categories":{"count":10,"average":54,"median":54,"min":48,"max":61,"p95":59,"p99":60},"get_prompt":{"count":10,"average":104,"median":104,"min":95,"max":119,"p95":115,"p99":118},"prompts_help":{"count":10,"average":22,"median":22,"min":18,"max":25,"p95":24,"p99":25},"check_github_status":{"count":10,"average":152,"median":152,"min":139,"max":168,"p95":165,"p99":167},"compose_prompts":{"count":10,"average":142,"median":142,"min":128,"max":156,"p95":153,"p99":155}};
new Chart(perfCtx, {
type: 'bar',
data: {
labels: Object.keys(perfData),
datasets: [{
label: 'Average Response Time (ms)',
data: Object.values(perfData).map(s => s.average),
backgroundColor: '#3b82f6'
}]
},
options: {
responsive: true,
plugins: {
title: {
display: true,
text: 'Tool Performance'
}
},
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: 'Response Time (ms)'
}
}
}
}
});
</script>
</body>
</html>