snow-flow 3.4.15 → 3.4.17
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 +45 -5
- package/dist/mcp/servicenow-development-assistant-mcp.js +6 -6
- package/dist/mcp/servicenow-operations-mcp.js +1 -1
- package/dist/memory/snow-flow-memory-patterns.d.ts +33 -0
- package/dist/memory/snow-flow-memory-patterns.js +35 -0
- package/package.json +1 -1
- package/website/README.md +2 -2
- package/website/css/style.css +279 -0
- package/website/index.html +18 -247
- package/website/js/main.js +158 -2
- package/website/tools.js +887 -0
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 🏔️ Snow-Flow
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/snow-flow)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -231,9 +231,9 @@ const prediction = await snow_predict({
|
|
|
231
231
|
// Result: { category: "Email", confidence: 0.94 }
|
|
232
232
|
```
|
|
233
233
|
|
|
234
|
-
## 🔧
|
|
234
|
+
## 🔧 17 Specialized MCP Servers
|
|
235
235
|
|
|
236
|
-
Snow-Flow includes
|
|
236
|
+
Snow-Flow includes exactly 17 MCP servers, each providing specialized tools for different aspects of ServiceNow development:
|
|
237
237
|
|
|
238
238
|
### 1. 🚀 **Deployment Server** (40+ tools)
|
|
239
239
|
Deploy artifacts with automatic validation and rollback capabilities
|
|
@@ -308,7 +308,47 @@ Advanced reporting and visualization
|
|
|
308
308
|
- `snow_define_kpi` - KPI management
|
|
309
309
|
- `snow_analyze_data_quality` - Data validation
|
|
310
310
|
|
|
311
|
-
### 12.
|
|
311
|
+
### 12. 📚 **Knowledge & Catalog Server** (14+ tools)
|
|
312
|
+
Knowledge base and service catalog management
|
|
313
|
+
- `snow_create_knowledge_article` - Create articles
|
|
314
|
+
- `snow_search_knowledge` - Search knowledge base
|
|
315
|
+
- `snow_create_catalog_item` - Create catalog items
|
|
316
|
+
- `snow_create_catalog_variable` - Catalog variables
|
|
317
|
+
- `snow_order_catalog_item` - Order items
|
|
318
|
+
|
|
319
|
+
### 13. 🔄 **Change, Virtual Agent & PA Server** (19+ tools)
|
|
320
|
+
Change management, Virtual Agent, and Performance Analytics
|
|
321
|
+
- `snow_create_change_request` - Change requests
|
|
322
|
+
- `snow_schedule_cab_meeting` - CAB meetings
|
|
323
|
+
- `snow_create_va_topic` - Virtual Agent topics
|
|
324
|
+
- `snow_create_pa_indicator` - PA indicators
|
|
325
|
+
- `snow_get_pa_scores` - Performance scores
|
|
326
|
+
|
|
327
|
+
### 14. 📱 **Flow, Workspace & Mobile Server** (20+ tools)
|
|
328
|
+
Flow Designer, Workspace, and Mobile app management
|
|
329
|
+
- `snow_create_flow` - Create flows
|
|
330
|
+
- `snow_test_flow` - Test flows
|
|
331
|
+
- `snow_create_workspace` - Create workspaces
|
|
332
|
+
- `snow_configure_mobile_app` - Mobile config
|
|
333
|
+
- `snow_send_push_notification` - Push notifications
|
|
334
|
+
|
|
335
|
+
### 15. 🗄️ **CMDB, Event, HR, CSM & DevOps Server** (23+ tools)
|
|
336
|
+
Configuration, Events, HR, Customer Service, DevOps
|
|
337
|
+
- `snow_create_ci` - Create CIs
|
|
338
|
+
- `snow_run_discovery` - Run discovery
|
|
339
|
+
- `snow_create_event` - Create events
|
|
340
|
+
- `snow_employee_onboarding` - HR onboarding
|
|
341
|
+
- `snow_create_devops_pipeline` - DevOps pipelines
|
|
342
|
+
|
|
343
|
+
### 16. ⚡ **Advanced Features Server** (14+ tools)
|
|
344
|
+
Advanced optimization and analysis capabilities
|
|
345
|
+
- `snow_batch_api` - Batch operations (80% API reduction)
|
|
346
|
+
- `snow_get_table_relationships` - Table analysis
|
|
347
|
+
- `snow_discover_process` - Process mining
|
|
348
|
+
- `snow_analyze_workflow_execution` - Workflow analysis
|
|
349
|
+
- `snow_generate_documentation` - Auto-documentation
|
|
350
|
+
|
|
351
|
+
### 17. 👑 **Orchestration Server** (25+ tools)
|
|
312
352
|
Multi-agent coordination
|
|
313
353
|
- `snow_swarm_init` - Initialize swarms
|
|
314
354
|
- `snow_agent_spawn` - Create agents
|
|
@@ -662,4 +702,4 @@ Special thanks to:
|
|
|
662
702
|
|
|
663
703
|
**Built with ❤️ for ServiceNow developers by developers who understand the struggle.**
|
|
664
704
|
|
|
665
|
-
*Snow-Flow - Where ServiceNow development meets artificial intelligence.*
|
|
705
|
+
*Snow-Flow - Where ServiceNow development meets artificial intelligence.* 🏔️
|
|
@@ -12,7 +12,7 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
|
12
12
|
const servicenow_client_js_1 = require("../utils/servicenow-client.js");
|
|
13
13
|
const mcp_auth_middleware_js_1 = require("../utils/mcp-auth-middleware.js");
|
|
14
14
|
const mcp_config_manager_js_1 = require("../utils/mcp-config-manager.js");
|
|
15
|
-
const mcp_logger_js_1 = require("
|
|
15
|
+
const mcp_logger_js_1 = require("./shared/mcp-logger.js");
|
|
16
16
|
const widget_template_generator_js_1 = require("../utils/widget-template-generator.js");
|
|
17
17
|
const fs_1 = require("fs");
|
|
18
18
|
const path_1 = require("path");
|
|
@@ -20,7 +20,7 @@ const self_documenting_system_js_1 = require("../documentation/self-documenting-
|
|
|
20
20
|
const cost_optimization_engine_js_1 = require("../optimization/cost-optimization-engine.js");
|
|
21
21
|
const advanced_compliance_system_js_1 = require("../compliance/advanced-compliance-system.js");
|
|
22
22
|
const self_healing_system_js_1 = require("../healing/self-healing-system.js");
|
|
23
|
-
const
|
|
23
|
+
const queen_memory_system_js_1 = require("../queen/queen-memory-system.js");
|
|
24
24
|
class ServiceNowDevelopmentAssistantMCP {
|
|
25
25
|
constructor() {
|
|
26
26
|
this.memoryIndex = new Map();
|
|
@@ -41,12 +41,12 @@ class ServiceNowDevelopmentAssistantMCP {
|
|
|
41
41
|
async initializeSystems() {
|
|
42
42
|
try {
|
|
43
43
|
// Initialize systems synchronously during server startup
|
|
44
|
-
this.memorySystem = new
|
|
44
|
+
this.memorySystem = new queen_memory_system_js_1.QueenMemorySystem({
|
|
45
45
|
dbPath: './.snow-flow/data/intelligent-mcp.db',
|
|
46
46
|
cache: { enabled: true, maxSize: 100, ttl: 3600 },
|
|
47
47
|
ttl: { default: 3600, session: 7200, artifact: 86400, metric: 604800 }
|
|
48
48
|
});
|
|
49
|
-
await this.memorySystem.initialize();
|
|
49
|
+
// await this.memorySystem.initialize(); // QueenMemorySystem doesn't have initialize method
|
|
50
50
|
this.logger.info('Memory system initialized');
|
|
51
51
|
this.documentationSystem = new self_documenting_system_js_1.SelfDocumentingSystem(this.client, this.memorySystem);
|
|
52
52
|
this.costOptimizationEngine = new cost_optimization_engine_js_1.CostOptimizationEngine(this.client, this.memorySystem);
|
|
@@ -57,8 +57,8 @@ class ServiceNowDevelopmentAssistantMCP {
|
|
|
57
57
|
catch (error) {
|
|
58
58
|
this.logger.error('Failed to initialize systems:', error);
|
|
59
59
|
// Initialize minimal fallback systems
|
|
60
|
-
this.memorySystem = new
|
|
61
|
-
await this.memorySystem.initialize();
|
|
60
|
+
this.memorySystem = new queen_memory_system_js_1.QueenMemorySystem({ dbPath: './.snow-flow/data/intelligent-mcp.db' });
|
|
61
|
+
// await this.memorySystem.initialize(); // QueenMemorySystem doesn't have initialize method
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
setupHandlers() {
|
|
@@ -3284,7 +3284,7 @@ exports.ServiceNowOperationsMCP = ServiceNowOperationsMCP;
|
|
|
3284
3284
|
if (require.main === module) {
|
|
3285
3285
|
const server = new ServiceNowOperationsMCP();
|
|
3286
3286
|
server.run().catch((error) => {
|
|
3287
|
-
|
|
3287
|
+
console.error('Failed to start ServiceNow Operations MCP server:', error);
|
|
3288
3288
|
process.exit(1);
|
|
3289
3289
|
});
|
|
3290
3290
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snow-Flow Memory Patterns - Stub Implementation
|
|
3
|
+
* Minimal implementation to support Queen Memory System
|
|
4
|
+
*/
|
|
5
|
+
export declare class SnowFlowMemoryOrganizer {
|
|
6
|
+
static getWidgetMemoryStructure(name: string): {
|
|
7
|
+
key: string;
|
|
8
|
+
patterns: string[];
|
|
9
|
+
context: {
|
|
10
|
+
type: string;
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
static getFlowMemoryStructure(name: string): {
|
|
15
|
+
key: string;
|
|
16
|
+
patterns: string[];
|
|
17
|
+
context: {
|
|
18
|
+
type: string;
|
|
19
|
+
name: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
static getScriptMemoryStructure(name: string, scriptType?: string): {
|
|
23
|
+
key: string;
|
|
24
|
+
patterns: string[];
|
|
25
|
+
context: {
|
|
26
|
+
type: string;
|
|
27
|
+
name: string;
|
|
28
|
+
scriptType: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
static generateKey(category: string, type: string, name: string): string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=snow-flow-memory-patterns.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Snow-Flow Memory Patterns - Stub Implementation
|
|
4
|
+
* Minimal implementation to support Queen Memory System
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SnowFlowMemoryOrganizer = void 0;
|
|
8
|
+
class SnowFlowMemoryOrganizer {
|
|
9
|
+
static getWidgetMemoryStructure(name) {
|
|
10
|
+
return {
|
|
11
|
+
key: this.generateKey('artifacts', 'widget', name),
|
|
12
|
+
patterns: ['template', 'script', 'client_script'],
|
|
13
|
+
context: { type: 'widget', name }
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
static getFlowMemoryStructure(name) {
|
|
17
|
+
return {
|
|
18
|
+
key: this.generateKey('artifacts', 'flow', name),
|
|
19
|
+
patterns: ['actions', 'conditions', 'variables'],
|
|
20
|
+
context: { type: 'flow', name }
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
static getScriptMemoryStructure(name, scriptType = 'server') {
|
|
24
|
+
return {
|
|
25
|
+
key: this.generateKey('artifacts', 'script', name),
|
|
26
|
+
patterns: ['functions', 'variables', 'dependencies'],
|
|
27
|
+
context: { type: 'script', name, scriptType }
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
static generateKey(category, type, name) {
|
|
31
|
+
return `${category}:${type}:${name}`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.SnowFlowMemoryOrganizer = SnowFlowMemoryOrganizer;
|
|
35
|
+
//# sourceMappingURL=snow-flow-memory-patterns.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "snow-flow",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.17",
|
|
4
4
|
"description": "ServiceNow development framework with MCP server integration. Executes background scripts using ES5 JavaScript only (ServiceNow Rhino engine requirement). Provides 17 MCP servers for complete ServiceNow operations including widget deployment with coherence validation, table operations, script execution, machine learning, advanced features, and comprehensive platform management.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "commonjs",
|
package/website/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Snow-Flow Website
|
|
1
|
+
# Snow-Flow Website 🏔️
|
|
2
2
|
|
|
3
3
|
Official documentation website for Snow-Flow - Advanced ServiceNow Development Framework.
|
|
4
4
|
|
|
@@ -104,7 +104,7 @@ Edit the CSS variables in `css/style.css`:
|
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
### Logo
|
|
107
|
-
The logo uses emojis (
|
|
107
|
+
The logo uses emojis (🏔️). To change it, update all instances in:
|
|
108
108
|
- `index.html`
|
|
109
109
|
- `docs/api-full.html`
|
|
110
110
|
|
package/website/css/style.css
CHANGED
|
@@ -739,6 +739,285 @@ pre code {
|
|
|
739
739
|
margin-top: 1rem;
|
|
740
740
|
}
|
|
741
741
|
|
|
742
|
+
/* Dynamic MCP Cards */
|
|
743
|
+
.mcp-filter {
|
|
744
|
+
display: flex;
|
|
745
|
+
justify-content: center;
|
|
746
|
+
gap: 1rem;
|
|
747
|
+
margin-bottom: 2rem;
|
|
748
|
+
flex-wrap: wrap;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
.filter-btn {
|
|
752
|
+
padding: 0.5rem 1.5rem;
|
|
753
|
+
border: 2px solid var(--border-color);
|
|
754
|
+
background: white;
|
|
755
|
+
border-radius: 25px;
|
|
756
|
+
cursor: pointer;
|
|
757
|
+
font-weight: 500;
|
|
758
|
+
transition: all 0.3s ease;
|
|
759
|
+
font-size: 0.9rem;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
.filter-btn:hover {
|
|
763
|
+
border-color: var(--primary-color);
|
|
764
|
+
color: var(--primary-color);
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
.filter-btn.active {
|
|
768
|
+
background: var(--primary-color);
|
|
769
|
+
border-color: var(--primary-color);
|
|
770
|
+
color: white;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
.mcp-grid-dynamic {
|
|
774
|
+
display: grid;
|
|
775
|
+
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
|
776
|
+
gap: 2rem;
|
|
777
|
+
margin-top: 2rem;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
.mcp-card-dynamic {
|
|
781
|
+
background: var(--card-bg);
|
|
782
|
+
border-radius: 15px;
|
|
783
|
+
box-shadow: var(--shadow-md);
|
|
784
|
+
overflow: hidden;
|
|
785
|
+
transition: all 0.3s ease;
|
|
786
|
+
border: 1px solid var(--border-color);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.mcp-card-dynamic:hover {
|
|
790
|
+
transform: translateY(-5px);
|
|
791
|
+
box-shadow: var(--shadow-lg);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
.mcp-card-dynamic.expanded {
|
|
795
|
+
box-shadow: var(--shadow-xl);
|
|
796
|
+
border-color: var(--primary-color);
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
.mcp-card-header {
|
|
800
|
+
padding: 1.5rem;
|
|
801
|
+
display: flex;
|
|
802
|
+
justify-content: space-between;
|
|
803
|
+
align-items: flex-start;
|
|
804
|
+
border-bottom: 1px solid var(--border-color);
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
.mcp-title {
|
|
808
|
+
flex: 1;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
.mcp-title h3 {
|
|
812
|
+
margin: 0 0 0.5rem 0;
|
|
813
|
+
color: var(--text-primary);
|
|
814
|
+
font-size: 1.2rem;
|
|
815
|
+
font-weight: 600;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.mcp-badge {
|
|
819
|
+
background: var(--gradient-secondary);
|
|
820
|
+
color: white;
|
|
821
|
+
padding: 0.25rem 0.75rem;
|
|
822
|
+
border-radius: 20px;
|
|
823
|
+
font-size: 0.8rem;
|
|
824
|
+
font-weight: 600;
|
|
825
|
+
display: inline-block;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.mcp-expand-btn {
|
|
829
|
+
background: none;
|
|
830
|
+
border: none;
|
|
831
|
+
cursor: pointer;
|
|
832
|
+
padding: 0.5rem;
|
|
833
|
+
border-radius: 50%;
|
|
834
|
+
transition: all 0.3s ease;
|
|
835
|
+
color: var(--text-secondary);
|
|
836
|
+
margin-left: 1rem;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
.mcp-expand-btn:hover {
|
|
840
|
+
background: var(--light-bg);
|
|
841
|
+
color: var(--primary-color);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
.mcp-expand-btn.expanded svg {
|
|
845
|
+
transform: rotate(180deg);
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
.mcp-expand-btn svg {
|
|
849
|
+
transition: transform 0.3s ease;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
.mcp-description {
|
|
853
|
+
padding: 0 1.5rem 1.5rem 1.5rem;
|
|
854
|
+
color: var(--text-secondary);
|
|
855
|
+
margin: 0;
|
|
856
|
+
line-height: 1.5;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
.mcp-tools-container {
|
|
860
|
+
border-top: 1px solid var(--border-color);
|
|
861
|
+
background: #f9fafb;
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
.mcp-tools-grid {
|
|
865
|
+
padding: 1.5rem;
|
|
866
|
+
display: grid;
|
|
867
|
+
gap: 1rem;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
.tool-item {
|
|
871
|
+
background: white;
|
|
872
|
+
padding: 1rem;
|
|
873
|
+
border-radius: 8px;
|
|
874
|
+
border: 1px solid var(--border-color);
|
|
875
|
+
transition: all 0.2s ease;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.tool-item:hover {
|
|
879
|
+
border-color: var(--primary-color);
|
|
880
|
+
box-shadow: 0 2px 8px rgba(0,102,204,0.1);
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
.tool-header {
|
|
884
|
+
margin-bottom: 0.5rem;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
.tool-name {
|
|
888
|
+
background: #f7fafc;
|
|
889
|
+
color: var(--primary-color);
|
|
890
|
+
padding: 0.25rem 0.5rem;
|
|
891
|
+
border-radius: 4px;
|
|
892
|
+
font-size: 0.9rem;
|
|
893
|
+
font-weight: 600;
|
|
894
|
+
border: 1px solid #e2e8f0;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
.tool-description {
|
|
898
|
+
color: var(--text-secondary);
|
|
899
|
+
margin: 0;
|
|
900
|
+
font-size: 0.9rem;
|
|
901
|
+
line-height: 1.4;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
/* Enhanced Search */
|
|
905
|
+
.mcp-search {
|
|
906
|
+
transition: all 0.3s ease !important;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
.mcp-search:focus {
|
|
910
|
+
outline: none;
|
|
911
|
+
border-color: var(--primary-color) !important;
|
|
912
|
+
box-shadow: 0 0 0 3px rgba(0,102,204,0.1) !important;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/* Animation Classes */
|
|
916
|
+
@keyframes fadeIn {
|
|
917
|
+
from {
|
|
918
|
+
opacity: 0;
|
|
919
|
+
transform: translateY(10px);
|
|
920
|
+
}
|
|
921
|
+
to {
|
|
922
|
+
opacity: 1;
|
|
923
|
+
transform: translateY(0);
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
.fadeIn {
|
|
928
|
+
animation: fadeIn 0.3s ease;
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
/* Loading States */
|
|
932
|
+
.mcp-grid-dynamic.loading {
|
|
933
|
+
opacity: 0.6;
|
|
934
|
+
pointer-events: none;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
.mcp-grid-dynamic.loading::after {
|
|
938
|
+
content: "Loading tools...";
|
|
939
|
+
position: absolute;
|
|
940
|
+
top: 50%;
|
|
941
|
+
left: 50%;
|
|
942
|
+
transform: translate(-50%, -50%);
|
|
943
|
+
font-size: 1.2rem;
|
|
944
|
+
color: var(--text-secondary);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
/* Tool Count Indicators */
|
|
948
|
+
.server-stats {
|
|
949
|
+
display: flex;
|
|
950
|
+
gap: 1rem;
|
|
951
|
+
margin-top: 1rem;
|
|
952
|
+
padding-top: 1rem;
|
|
953
|
+
border-top: 1px solid var(--border-color);
|
|
954
|
+
font-size: 0.9rem;
|
|
955
|
+
color: var(--text-light);
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
.stat-item {
|
|
959
|
+
display: flex;
|
|
960
|
+
align-items: center;
|
|
961
|
+
gap: 0.5rem;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
.stat-icon {
|
|
965
|
+
width: 16px;
|
|
966
|
+
height: 16px;
|
|
967
|
+
background: var(--gradient-secondary);
|
|
968
|
+
border-radius: 50%;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
/* Responsive Design for Dynamic Cards */
|
|
972
|
+
@media (max-width: 1024px) {
|
|
973
|
+
.mcp-grid-dynamic {
|
|
974
|
+
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
|
975
|
+
gap: 1.5rem;
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
@media (max-width: 768px) {
|
|
980
|
+
.mcp-grid-dynamic {
|
|
981
|
+
grid-template-columns: 1fr;
|
|
982
|
+
gap: 1rem;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
.mcp-card-header {
|
|
986
|
+
padding: 1rem;
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
.mcp-description {
|
|
990
|
+
padding: 0 1rem 1rem 1rem;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
.mcp-tools-grid {
|
|
994
|
+
padding: 1rem;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
.mcp-filter {
|
|
998
|
+
gap: 0.5rem;
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
.filter-btn {
|
|
1002
|
+
padding: 0.4rem 1rem;
|
|
1003
|
+
font-size: 0.8rem;
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
@media (max-width: 480px) {
|
|
1008
|
+
.tool-item {
|
|
1009
|
+
padding: 0.75rem;
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
.tool-name {
|
|
1013
|
+
font-size: 0.8rem;
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
.tool-description {
|
|
1017
|
+
font-size: 0.85rem;
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
|
|
742
1021
|
/* Responsive Design */
|
|
743
1022
|
@media (max-width: 768px) {
|
|
744
1023
|
.nav-menu {
|