@softtechai/quickmcp 1.0.8
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/README.md +553 -0
- package/dist/client/MCPClient.d.ts +24 -0
- package/dist/client/MCPClient.d.ts.map +1 -0
- package/dist/client/MCPClient.js +211 -0
- package/dist/client/MCPClient.js.map +1 -0
- package/dist/client/MCPClientUnified.d.ts +31 -0
- package/dist/client/MCPClientUnified.d.ts.map +1 -0
- package/dist/client/MCPClientUnified.js +275 -0
- package/dist/client/MCPClientUnified.js.map +1 -0
- package/dist/client/MCPTestRunner.d.ts +44 -0
- package/dist/client/MCPTestRunner.d.ts.map +1 -0
- package/dist/client/MCPTestRunner.js +220 -0
- package/dist/client/MCPTestRunner.js.map +1 -0
- package/dist/client/MCPTestRunnerUnified.d.ts +48 -0
- package/dist/client/MCPTestRunnerUnified.d.ts.map +1 -0
- package/dist/client/MCPTestRunnerUnified.js +183 -0
- package/dist/client/MCPTestRunnerUnified.js.map +1 -0
- package/dist/database/json-manager.d.ts +55 -0
- package/dist/database/json-manager.d.ts.map +1 -0
- package/dist/database/json-manager.js +128 -0
- package/dist/database/json-manager.js.map +1 -0
- package/dist/database/sqlite-manager.d.ts +53 -0
- package/dist/database/sqlite-manager.d.ts.map +1 -0
- package/dist/database/sqlite-manager.js +193 -0
- package/dist/database/sqlite-manager.js.map +1 -0
- package/dist/dynamic-mcp-executor.d.ts +14 -0
- package/dist/dynamic-mcp-executor.d.ts.map +1 -0
- package/dist/dynamic-mcp-executor.js +274 -0
- package/dist/dynamic-mcp-executor.js.map +1 -0
- package/dist/generators/MCPServerGenerator-new.d.ts +37 -0
- package/dist/generators/MCPServerGenerator-new.d.ts.map +1 -0
- package/dist/generators/MCPServerGenerator-new.js +287 -0
- package/dist/generators/MCPServerGenerator-new.js.map +1 -0
- package/dist/generators/MCPServerGenerator.d.ts +42 -0
- package/dist/generators/MCPServerGenerator.d.ts.map +1 -0
- package/dist/generators/MCPServerGenerator.js +494 -0
- package/dist/generators/MCPServerGenerator.js.map +1 -0
- package/dist/generators/database/sqlite-manager.d.ts +52 -0
- package/dist/generators/database/sqlite-manager.js +143 -0
- package/dist/generators/generators/MCPServerGenerator.d.ts +37 -0
- package/dist/generators/generators/MCPServerGenerator.js +396 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/integrated-mcp-server-new.d.ts +12 -0
- package/dist/integrated-mcp-server-new.d.ts.map +1 -0
- package/dist/integrated-mcp-server-new.js +253 -0
- package/dist/integrated-mcp-server-new.js.map +1 -0
- package/dist/integrated-mcp-server.d.ts +25 -0
- package/dist/integrated-mcp-server.d.ts.map +1 -0
- package/dist/integrated-mcp-server.js +541 -0
- package/dist/integrated-mcp-server.js.map +1 -0
- package/dist/mcp-inspector-server.d.ts +3 -0
- package/dist/mcp-inspector-server.d.ts.map +1 -0
- package/dist/mcp-inspector-server.js +119 -0
- package/dist/mcp-inspector-server.js.map +1 -0
- package/dist/mcp-sdk-server.d.ts +3 -0
- package/dist/mcp-sdk-server.d.ts.map +1 -0
- package/dist/mcp-sdk-server.js +90 -0
- package/dist/mcp-sdk-server.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +300 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/parsers/CsvParser.d.ts +7 -0
- package/dist/parsers/CsvParser.d.ts.map +1 -0
- package/dist/parsers/CsvParser.js +98 -0
- package/dist/parsers/CsvParser.js.map +1 -0
- package/dist/parsers/DatabaseParser.d.ts +18 -0
- package/dist/parsers/DatabaseParser.d.ts.map +1 -0
- package/dist/parsers/DatabaseParser.js +372 -0
- package/dist/parsers/DatabaseParser.js.map +1 -0
- package/dist/parsers/ExcelParser.d.ts +8 -0
- package/dist/parsers/ExcelParser.d.ts.map +1 -0
- package/dist/parsers/ExcelParser.js +119 -0
- package/dist/parsers/ExcelParser.js.map +1 -0
- package/dist/parsers/index.d.ts +13 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +88 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/parsers/ExcelParser.js +118 -0
- package/dist/parsers/types/index.js +2 -0
- package/dist/quickmcp-unified-bridge.d.ts +13 -0
- package/dist/quickmcp-unified-bridge.d.ts.map +1 -0
- package/dist/quickmcp-unified-bridge.js +176 -0
- package/dist/quickmcp-unified-bridge.js.map +1 -0
- package/dist/server/ServerManager.d.ts +37 -0
- package/dist/server/ServerManager.d.ts.map +1 -0
- package/dist/server/ServerManager.js +376 -0
- package/dist/server/ServerManager.js.map +1 -0
- package/dist/sqlite-manager.js +145 -0
- package/dist/start-new-server.d.ts +3 -0
- package/dist/start-new-server.d.ts.map +1 -0
- package/dist/start-new-server.js +10 -0
- package/dist/start-new-server.js.map +1 -0
- package/dist/test-app.d.ts +2 -0
- package/dist/test-app.d.ts.map +1 -0
- package/dist/test-app.js +119 -0
- package/dist/test-app.js.map +1 -0
- package/dist/test-new-architecture.d.ts +3 -0
- package/dist/test-new-architecture.d.ts.map +1 -0
- package/dist/test-new-architecture.js +72 -0
- package/dist/test-new-architecture.js.map +1 -0
- package/dist/transport/base-transport.d.ts +21 -0
- package/dist/transport/base-transport.d.ts.map +1 -0
- package/dist/transport/base-transport.js +16 -0
- package/dist/transport/base-transport.js.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +12 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/sse-transport.d.ts +13 -0
- package/dist/transport/sse-transport.d.ts.map +1 -0
- package/dist/transport/sse-transport.js +106 -0
- package/dist/transport/sse-transport.js.map +1 -0
- package/dist/transport/stdio-transport.d.ts +8 -0
- package/dist/transport/stdio-transport.d.ts.map +1 -0
- package/dist/transport/stdio-transport.js +53 -0
- package/dist/transport/stdio-transport.js.map +1 -0
- package/dist/transport/streamable-http-transport.d.ts +15 -0
- package/dist/transport/streamable-http-transport.d.ts.map +1 -0
- package/dist/transport/streamable-http-transport.js +151 -0
- package/dist/transport/streamable-http-transport.js.map +1 -0
- package/dist/types/index.d.ts +64 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/web/client/MCPClient.js +348 -0
- package/dist/web/client/MCPTestRunner.js +317 -0
- package/dist/web/database/json-manager.js +124 -0
- package/dist/web/database/sqlite-manager.js +146 -0
- package/dist/web/dynamic-mcp-executor.js +443 -0
- package/dist/web/generators/MCPServerGenerator-new.js +284 -0
- package/dist/web/generators/MCPServerGenerator.js +566 -0
- package/dist/web/integrated-mcp-server-new.js +394 -0
- package/dist/web/parsers/CsvParser.js +144 -0
- package/dist/web/parsers/DatabaseParser.js +637 -0
- package/dist/web/parsers/ExcelParser.js +180 -0
- package/dist/web/parsers/index.js +152 -0
- package/dist/web/server.d.ts +3 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +790 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/types/index.js +2 -0
- package/dist/web/web/server.js +860 -0
- package/package.json +68 -0
- package/quickmcp-direct-stdio.js +328 -0
- package/src/web/public/app.js +1795 -0
- package/src/web/public/database-tables.html +711 -0
- package/src/web/public/how-to-use.html +571 -0
- package/src/web/public/how-to-use.js +255 -0
- package/src/web/public/images/1-claude-quickmcp-stdio.png +0 -0
- package/src/web/public/images/2-claude-tools.png +0 -0
- package/src/web/public/images/3-claude-developer-settings.png +0 -0
- package/src/web/public/images/4-claude-config.png +0 -0
- package/src/web/public/images/5-claude-config-edit.png +0 -0
- package/src/web/public/index.html +626 -0
- package/src/web/public/manage-servers.html +198 -0
- package/src/web/public/modern-styles.css +946 -0
- package/src/web/public/shared-styles.css +2091 -0
- package/src/web/public/shared.js +93 -0
- package/src/web/public/test-servers.html +302 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Shared utility functions for QuickMCP
|
|
2
|
+
|
|
3
|
+
// Initialize sidebar functionality
|
|
4
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
5
|
+
// Close sidebar when overlay is clicked on mobile
|
|
6
|
+
const overlay = document.getElementById('sidebarOverlay');
|
|
7
|
+
if (overlay) {
|
|
8
|
+
overlay.addEventListener('click', closeSidebar);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Handle responsive behavior
|
|
12
|
+
window.addEventListener('resize', handleResize);
|
|
13
|
+
handleResize();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// Handle responsive behavior
|
|
17
|
+
function handleResize() {
|
|
18
|
+
const sidebar = document.getElementById('sidebar');
|
|
19
|
+
if (window.innerWidth >= 1024) {
|
|
20
|
+
// Desktop: sidebar always visible
|
|
21
|
+
sidebar?.classList.remove('-translate-x-full');
|
|
22
|
+
} else {
|
|
23
|
+
// Mobile: sidebar hidden by default
|
|
24
|
+
sidebar?.classList.add('-translate-x-full');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Utility function to close sidebar (called from main app)
|
|
29
|
+
function closeSidebar() {
|
|
30
|
+
const sidebar = document.getElementById('sidebar');
|
|
31
|
+
const overlay = document.getElementById('sidebarOverlay');
|
|
32
|
+
|
|
33
|
+
sidebar?.classList.add('-translate-x-full');
|
|
34
|
+
overlay?.classList.add('opacity-0', 'invisible');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Global utility functions
|
|
38
|
+
window.utils = {
|
|
39
|
+
// Format numbers with commas
|
|
40
|
+
formatNumber: (num) => num.toLocaleString(),
|
|
41
|
+
|
|
42
|
+
// Truncate text
|
|
43
|
+
truncateText: (text, maxLength) => {
|
|
44
|
+
return text.length > maxLength ? text.substring(0, maxLength) + '...' : text;
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
// Copy text to clipboard
|
|
48
|
+
copyToClipboard: async (text) => {
|
|
49
|
+
try {
|
|
50
|
+
await navigator.clipboard.writeText(text);
|
|
51
|
+
return true;
|
|
52
|
+
} catch (err) {
|
|
53
|
+
console.error('Failed to copy text:', err);
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
// Show toast notification
|
|
59
|
+
showToast: (message, type = 'info') => {
|
|
60
|
+
const toast = document.createElement('div');
|
|
61
|
+
toast.className = `fixed top-4 right-4 z-50 p-4 rounded-lg shadow-lg transition-all duration-300 transform translate-x-full`;
|
|
62
|
+
|
|
63
|
+
switch (type) {
|
|
64
|
+
case 'success':
|
|
65
|
+
toast.classList.add('bg-green-500', 'text-white');
|
|
66
|
+
break;
|
|
67
|
+
case 'error':
|
|
68
|
+
toast.classList.add('bg-red-500', 'text-white');
|
|
69
|
+
break;
|
|
70
|
+
case 'warning':
|
|
71
|
+
toast.classList.add('bg-yellow-500', 'text-black');
|
|
72
|
+
break;
|
|
73
|
+
default:
|
|
74
|
+
toast.classList.add('bg-blue-500', 'text-white');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
toast.textContent = message;
|
|
78
|
+
document.body.appendChild(toast);
|
|
79
|
+
|
|
80
|
+
// Animate in
|
|
81
|
+
setTimeout(() => {
|
|
82
|
+
toast.classList.remove('translate-x-full');
|
|
83
|
+
}, 100);
|
|
84
|
+
|
|
85
|
+
// Animate out and remove
|
|
86
|
+
setTimeout(() => {
|
|
87
|
+
toast.classList.add('translate-x-full');
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
document.body.removeChild(toast);
|
|
90
|
+
}, 300);
|
|
91
|
+
}, 3000);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" class="h-full bg-gray-50">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Test Servers - MCP Server Generator</title>
|
|
7
|
+
|
|
8
|
+
<!-- Tailwind CSS -->
|
|
9
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
10
|
+
|
|
11
|
+
<!-- Font Awesome for icons -->
|
|
12
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
|
13
|
+
|
|
14
|
+
<!-- Google Fonts -->
|
|
15
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
16
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
17
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
|
18
|
+
|
|
19
|
+
<style>
|
|
20
|
+
body { font-family: 'Inter', sans-serif; }
|
|
21
|
+
|
|
22
|
+
/* Custom animations */
|
|
23
|
+
@keyframes slideIn {
|
|
24
|
+
from { transform: translateX(-100%); opacity: 0; }
|
|
25
|
+
to { transform: translateX(0); opacity: 1; }
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@keyframes fadeIn {
|
|
29
|
+
from { opacity: 0; transform: translateY(20px); }
|
|
30
|
+
to { opacity: 1; transform: translateY(0); }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.slide-in { animation: slideIn 0.3s ease-out; }
|
|
34
|
+
.fade-in { animation: fadeIn 0.5s ease-out; }
|
|
35
|
+
|
|
36
|
+
/* Custom scrollbar */
|
|
37
|
+
::-webkit-scrollbar { width: 6px; }
|
|
38
|
+
::-webkit-scrollbar-track { background: #f1f5f9; }
|
|
39
|
+
::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; }
|
|
40
|
+
::-webkit-scrollbar-thumb:hover { background: #94a3b8; }
|
|
41
|
+
|
|
42
|
+
/* Glassmorphism effect */
|
|
43
|
+
.glass {
|
|
44
|
+
backdrop-filter: blur(20px);
|
|
45
|
+
background: rgba(255, 255, 255, 0.8);
|
|
46
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.glass-dark {
|
|
50
|
+
backdrop-filter: blur(20px);
|
|
51
|
+
background: rgba(15, 23, 42, 0.8);
|
|
52
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
|
|
56
|
+
<!-- Tailwind Config -->
|
|
57
|
+
<script>
|
|
58
|
+
tailwind.config = {
|
|
59
|
+
theme: {
|
|
60
|
+
extend: {
|
|
61
|
+
colors: {
|
|
62
|
+
primary: {
|
|
63
|
+
50: '#f0f9ff',
|
|
64
|
+
500: '#0ea5e9',
|
|
65
|
+
600: '#0284c7',
|
|
66
|
+
700: '#0369a1',
|
|
67
|
+
900: '#0c4a6e'
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
animation: {
|
|
71
|
+
'bounce-slow': 'bounce 2s infinite',
|
|
72
|
+
'pulse-slow': 'pulse 3s infinite'
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
</script>
|
|
78
|
+
</head>
|
|
79
|
+
<body class="h-full bg-gradient-to-br from-blue-50 via-white to-cyan-50">
|
|
80
|
+
<!-- Main App Container -->
|
|
81
|
+
<div id="app" class="flex h-full">
|
|
82
|
+
|
|
83
|
+
<!-- Sidebar -->
|
|
84
|
+
<div id="sidebar" class="fixed inset-y-0 left-0 z-50 w-64 bg-white/90 backdrop-blur-xl border-r border-gray-200/50 transform -translate-x-full lg:translate-x-0 transition-transform duration-300 ease-in-out">
|
|
85
|
+
<div class="flex flex-col h-full">
|
|
86
|
+
<!-- Sidebar Header -->
|
|
87
|
+
<div class="flex items-center justify-between p-6 border-b border-gray-200/50">
|
|
88
|
+
<div class="flex items-center space-x-3">
|
|
89
|
+
<div class="w-10 h-10 bg-gradient-to-r from-blue-500 to-cyan-500 rounded-xl flex items-center justify-center">
|
|
90
|
+
<i class="fas fa-rocket text-white text-lg"></i>
|
|
91
|
+
</div>
|
|
92
|
+
<div>
|
|
93
|
+
<h1 class="text-xl font-bold text-gray-900">QuickMCP</h1>
|
|
94
|
+
<p class="text-xs text-gray-500">Server Generator</p>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
<button id="closeSidebar" class="lg:hidden p-2 rounded-lg hover:bg-gray-100 transition-colors">
|
|
98
|
+
<i class="fas fa-times text-gray-500"></i>
|
|
99
|
+
</button>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<!-- Navigation -->
|
|
103
|
+
<nav class="flex-1 px-4 py-6 space-y-2">
|
|
104
|
+
<a href="/" class="nav-item flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-xl hover:bg-gray-50 transition-all duration-200">
|
|
105
|
+
<i class="fas fa-magic mr-3 text-gray-400"></i>
|
|
106
|
+
Generate Server
|
|
107
|
+
</a>
|
|
108
|
+
<a href="/manage-servers" class="nav-item flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-xl hover:bg-gray-50 transition-all duration-200">
|
|
109
|
+
<i class="fas fa-server mr-3 text-gray-400"></i>
|
|
110
|
+
Manage Servers
|
|
111
|
+
</a>
|
|
112
|
+
<a href="/test-servers" class="nav-item active flex items-center px-4 py-3 text-sm font-medium rounded-xl bg-gradient-to-r from-blue-50 to-cyan-50 text-blue-700 border border-blue-200">
|
|
113
|
+
<i class="fas fa-vial mr-3 text-blue-500"></i>
|
|
114
|
+
Test Servers
|
|
115
|
+
</a>
|
|
116
|
+
<a href="/how-to-use" class="nav-item flex items-center px-4 py-3 text-sm font-medium text-gray-700 rounded-xl hover:bg-gray-50 transition-all duration-200">
|
|
117
|
+
<i class="fas fa-book mr-3 text-gray-400"></i>
|
|
118
|
+
How to Use
|
|
119
|
+
</a>
|
|
120
|
+
</nav>
|
|
121
|
+
|
|
122
|
+
<!-- Sidebar Footer -->
|
|
123
|
+
<div class="p-4 border-t border-gray-200/50">
|
|
124
|
+
<div class="bg-gradient-to-r from-blue-50 to-cyan-50 p-4 rounded-xl border border-blue-100">
|
|
125
|
+
<div class="flex items-center space-x-3">
|
|
126
|
+
<div class="w-8 h-8 bg-gradient-to-r from-green-400 to-blue-500 rounded-full flex items-center justify-center">
|
|
127
|
+
<i class="fas fa-check text-white text-xs"></i>
|
|
128
|
+
</div>
|
|
129
|
+
<div>
|
|
130
|
+
<p class="text-sm font-medium text-gray-900">All systems online</p>
|
|
131
|
+
<p class="text-xs text-gray-500">Ready to test servers</p>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<!-- Sidebar Overlay for mobile -->
|
|
140
|
+
<div id="sidebarOverlay" class="fixed inset-0 bg-gray-900/50 backdrop-blur-sm z-40 lg:hidden opacity-0 invisible transition-all duration-300"></div>
|
|
141
|
+
|
|
142
|
+
<!-- Main Content -->
|
|
143
|
+
<div class="flex-1 lg:pl-64">
|
|
144
|
+
<!-- Top Navigation -->
|
|
145
|
+
<header class="bg-white/80 backdrop-blur-xl border-b border-gray-200/50 sticky top-0 z-30">
|
|
146
|
+
<div class="px-4 sm:px-6 lg:px-8">
|
|
147
|
+
<div class="flex justify-between items-center h-16">
|
|
148
|
+
<div class="flex items-center space-x-4">
|
|
149
|
+
<button id="openSidebar" class="lg:hidden p-2 rounded-lg hover:bg-gray-100 transition-colors">
|
|
150
|
+
<i class="fas fa-bars text-gray-600"></i>
|
|
151
|
+
</button>
|
|
152
|
+
<div>
|
|
153
|
+
<h2 class="text-2xl font-bold text-gray-900">Test Servers</h2>
|
|
154
|
+
<p class="text-sm text-gray-500">Run automated tests or create custom test scenarios</p>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<div class="flex items-center space-x-4">
|
|
159
|
+
<div class="hidden sm:flex items-center space-x-2 bg-green-50 text-green-700 px-3 py-1 rounded-full text-sm font-medium">
|
|
160
|
+
<div class="w-2 h-2 bg-green-500 rounded-full animate-pulse"></div>
|
|
161
|
+
<span>Online</span>
|
|
162
|
+
</div>
|
|
163
|
+
<button class="p-2 rounded-lg hover:bg-gray-100 transition-colors relative">
|
|
164
|
+
<i class="fas fa-bell text-gray-600"></i>
|
|
165
|
+
<span class="absolute -top-1 -right-1 w-3 h-3 bg-red-500 rounded-full"></span>
|
|
166
|
+
</button>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</header>
|
|
171
|
+
|
|
172
|
+
<!-- Main Content -->
|
|
173
|
+
<main class="p-4 sm:p-6 lg:p-8">
|
|
174
|
+
<div class="max-w-7xl mx-auto space-y-8">
|
|
175
|
+
<div class="text-center">
|
|
176
|
+
<h1 class="text-3xl font-bold text-gray-900 mb-4">Test Your Servers</h1>
|
|
177
|
+
<p class="text-gray-600">Run automated tests or create custom test scenarios for your MCP servers</p>
|
|
178
|
+
</div>
|
|
179
|
+
|
|
180
|
+
<div class="grid grid-cols-1 xl:grid-cols-2 gap-8">
|
|
181
|
+
<!-- Auto Test -->
|
|
182
|
+
<div class="bg-white rounded-2xl shadow-lg border border-gray-200/50 overflow-hidden">
|
|
183
|
+
<div class="bg-gradient-to-r from-green-50 to-emerald-50 p-6 border-b border-gray-200/50">
|
|
184
|
+
<div class="flex items-center space-x-3">
|
|
185
|
+
<div class="w-10 h-10 bg-gradient-to-r from-green-500 to-emerald-500 rounded-xl flex items-center justify-center">
|
|
186
|
+
<i class="fas fa-play text-white"></i>
|
|
187
|
+
</div>
|
|
188
|
+
<div>
|
|
189
|
+
<h3 class="text-lg font-semibold text-gray-900">Auto Test</h3>
|
|
190
|
+
<p class="text-sm text-gray-600">Automated testing suite</p>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div class="p-6 space-y-6">
|
|
196
|
+
<div>
|
|
197
|
+
<label class="block text-sm font-medium text-gray-700 mb-2">Select Server</label>
|
|
198
|
+
<select id="testServerSelect" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-green-500 focus:border-transparent">
|
|
199
|
+
<option value="">Loading servers...</option>
|
|
200
|
+
</select>
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
<div class="flex space-x-3">
|
|
204
|
+
<button id="runQuickTestBtn" class="flex-1 bg-gradient-to-r from-green-500 to-emerald-500 text-white px-6 py-3 rounded-xl font-medium hover:from-green-600 hover:to-emerald-600 transition-all duration-200 transform hover:scale-[1.02]">
|
|
205
|
+
<i class="fas fa-bolt mr-2"></i>
|
|
206
|
+
<span id="quickTestText">Quick Run Auto Tests</span>
|
|
207
|
+
</button>
|
|
208
|
+
|
|
209
|
+
<button id="runFullTestBtn" class="flex-1 bg-gradient-to-r from-blue-500 to-indigo-500 text-white px-6 py-3 rounded-xl font-medium hover:from-blue-600 hover:to-indigo-600 transition-all duration-200 transform hover:scale-[1.02]">
|
|
210
|
+
<i class="fas fa-play-circle mr-2" id="fullTestIcon"></i>
|
|
211
|
+
<span id="fullTestText">Run Auto Tests</span>
|
|
212
|
+
</button>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
<div id="test-loading" class="hidden text-center py-4">
|
|
216
|
+
<div class="inline-flex items-center space-x-2 text-green-600">
|
|
217
|
+
<div class="w-4 h-4 border-2 border-green-600 border-t-transparent rounded-full animate-spin"></div>
|
|
218
|
+
<span id="loadingText">Running tests...</span>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
|
|
222
|
+
<div id="test-error" class="hidden bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg"></div>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
|
|
226
|
+
<!-- Custom Test -->
|
|
227
|
+
<div class="bg-white rounded-2xl shadow-lg border border-gray-200/50 overflow-hidden">
|
|
228
|
+
<div class="bg-gradient-to-r from-orange-50 to-yellow-50 p-6 border-b border-gray-200/50">
|
|
229
|
+
<div class="flex items-center space-x-3">
|
|
230
|
+
<div class="w-10 h-10 bg-gradient-to-r from-orange-500 to-yellow-500 rounded-xl flex items-center justify-center">
|
|
231
|
+
<i class="fas fa-code text-white"></i>
|
|
232
|
+
</div>
|
|
233
|
+
<div>
|
|
234
|
+
<h3 class="text-lg font-semibold text-gray-900">Custom Test</h3>
|
|
235
|
+
<p class="text-sm text-gray-600">Create custom test scenarios</p>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
|
|
240
|
+
<div class="p-6 space-y-6">
|
|
241
|
+
<div>
|
|
242
|
+
<label class="block text-sm font-medium text-gray-700 mb-2">Test Type</label>
|
|
243
|
+
<select id="testType" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-orange-500 focus:border-transparent">
|
|
244
|
+
<option value="tools/call">Tool Call</option>
|
|
245
|
+
<option value="resources/list">Resource List</option>
|
|
246
|
+
<option value="resources/read">Resource Read</option>
|
|
247
|
+
<option value="prompts/list">Prompt List</option>
|
|
248
|
+
<option value="prompts/get">Prompt Get</option>
|
|
249
|
+
</select>
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
<div>
|
|
253
|
+
<label class="block text-sm font-medium text-gray-700 mb-2">Test Name</label>
|
|
254
|
+
<div id="testNameContainer">
|
|
255
|
+
<input type="text" id="testName" placeholder="my-test-tool" class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-orange-500 focus:border-transparent">
|
|
256
|
+
</div>
|
|
257
|
+
</div>
|
|
258
|
+
|
|
259
|
+
<div>
|
|
260
|
+
<label class="block text-sm font-medium text-gray-700 mb-2">Parameters (JSON)</label>
|
|
261
|
+
<textarea id="testParams" rows="4" placeholder='{"param1": "value1"}' class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-orange-500 focus:border-transparent font-mono text-sm resize-none"></textarea>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
<button id="runCustomTestBtn" class="w-full bg-gradient-to-r from-orange-500 to-yellow-500 text-white px-6 py-3 rounded-xl font-medium hover:from-orange-600 hover:to-yellow-600 transition-all duration-200 transform hover:scale-[1.02]">
|
|
265
|
+
<i class="fas fa-flask mr-2"></i>
|
|
266
|
+
Run Custom Test
|
|
267
|
+
</button>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
|
|
272
|
+
<!-- Test Results -->
|
|
273
|
+
<div class="bg-white rounded-2xl shadow-lg border border-gray-200/50 overflow-hidden">
|
|
274
|
+
<div class="bg-gradient-to-r from-gray-50 to-slate-50 p-6 border-b border-gray-200/50">
|
|
275
|
+
<div class="flex items-center space-x-3">
|
|
276
|
+
<div class="w-10 h-10 bg-gradient-to-r from-gray-500 to-slate-500 rounded-xl flex items-center justify-center">
|
|
277
|
+
<i class="fas fa-chart-line text-white"></i>
|
|
278
|
+
</div>
|
|
279
|
+
<div>
|
|
280
|
+
<h3 class="text-lg font-semibold text-gray-900">Test Results</h3>
|
|
281
|
+
<p class="text-sm text-gray-600">View test execution results</p>
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
<div class="p-6">
|
|
286
|
+
<pre id="test-results" class="hidden bg-gray-50 p-4 rounded-xl text-sm overflow-auto max-h-96 font-mono border border-gray-200"></pre>
|
|
287
|
+
<div id="no-results" class="text-center py-12 text-gray-500">
|
|
288
|
+
<i class="fas fa-chart-line text-4xl mb-4 opacity-50"></i>
|
|
289
|
+
<p>No test results yet. Run a test to see results here.</p>
|
|
290
|
+
</div>
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
</main>
|
|
295
|
+
</div>
|
|
296
|
+
</div>
|
|
297
|
+
|
|
298
|
+
<!-- Scripts -->
|
|
299
|
+
<script src="shared.js"></script>
|
|
300
|
+
<script src="app.js"></script>
|
|
301
|
+
</body>
|
|
302
|
+
</html>
|