@defai.digital/ax-cli 3.1.5 → 3.3.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/.ax-cli/memory.json +8 -1
- package/README.md +93 -6
- package/config/models.yaml +13 -0
- package/dist/agent/context-manager.d.ts +5 -5
- package/dist/agent/context-manager.js +19 -9
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/llm-agent.d.ts +0 -2
- package/dist/agent/llm-agent.js +7 -50
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/subagent.js +2 -1
- package/dist/agent/subagent.js.map +1 -1
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.js +527 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/frontend.d.ts +9 -0
- package/dist/commands/frontend.js +645 -0
- package/dist/commands/frontend.js.map +1 -0
- package/dist/commands/mcp.js +409 -3
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/models.js +2 -2
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/setup.js +15 -13
- package/dist/commands/setup.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/hooks/use-enhanced-input.js +16 -3
- package/dist/hooks/use-enhanced-input.js.map +1 -1
- package/dist/hooks/use-input-handler.d.ts +5 -1
- package/dist/hooks/use-input-handler.js +118 -31
- package/dist/hooks/use-input-handler.js.map +1 -1
- package/dist/index.js +29 -5
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts +1 -0
- package/dist/llm/types.d.ts +49 -22
- package/dist/llm/types.js +12 -8
- package/dist/llm/types.js.map +1 -1
- package/dist/mcp/config.d.ts +1 -1
- package/dist/mcp/config.js +2 -2
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/health.d.ts +111 -0
- package/dist/mcp/health.js +244 -0
- package/dist/mcp/health.js.map +1 -0
- package/dist/mcp/templates.d.ts +52 -0
- package/dist/mcp/templates.js +624 -0
- package/dist/mcp/templates.js.map +1 -0
- package/dist/schemas/api-schemas.d.ts +2 -1
- package/dist/schemas/api-schemas.js +6 -4
- package/dist/schemas/api-schemas.js.map +1 -1
- package/dist/schemas/settings-schemas.d.ts +14 -0
- package/dist/schemas/settings-schemas.js +10 -0
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/tools/bash.js +25 -10
- package/dist/tools/bash.js.map +1 -1
- package/dist/ui/components/api-key-input.js +2 -2
- package/dist/ui/components/api-key-input.js.map +1 -1
- package/dist/ui/components/chat-history.js +14 -7
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-input.js +12 -7
- package/dist/ui/components/chat-input.js.map +1 -1
- package/dist/ui/components/chat-interface.js +64 -53
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/keyboard-hints.js +3 -2
- package/dist/ui/components/keyboard-hints.js.map +1 -1
- package/dist/ui/components/quick-actions.js +1 -0
- package/dist/ui/components/quick-actions.js.map +1 -1
- package/dist/ui/components/reasoning-display.js +14 -4
- package/dist/ui/components/reasoning-display.js.map +1 -1
- package/dist/ui/components/toast-notification.d.ts +29 -0
- package/dist/ui/components/toast-notification.js +15 -1
- package/dist/ui/components/toast-notification.js.map +1 -1
- package/dist/ui/components/welcome-panel.js +21 -2
- package/dist/ui/components/welcome-panel.js.map +1 -1
- package/dist/utils/config-loader.d.ts +1 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/settings-manager.d.ts +21 -1
- package/dist/utils/settings-manager.js +67 -0
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/setup-validator.js +1 -0
- package/dist/utils/setup-validator.js.map +1 -1
- package/dist/utils/text-utils.d.ts +1 -0
- package/dist/utils/text-utils.js +12 -0
- package/dist/utils/text-utils.js.map +1 -1
- package/package.json +1 -2
- package/vitest.config.ts +1 -0
package/dist/mcp/config.d.ts
CHANGED
|
@@ -10,4 +10,4 @@ export declare function saveMCPConfig(config: MCPConfig): void;
|
|
|
10
10
|
export declare function addMCPServer(config: MCPServerConfig): void;
|
|
11
11
|
export declare function removeMCPServer(serverName: string): void;
|
|
12
12
|
export declare function getMCPServer(serverName: string): MCPServerConfig | undefined;
|
|
13
|
-
export
|
|
13
|
+
export { TEMPLATES as PREDEFINED_SERVERS, getTemplate, hasTemplate, generateConfigFromTemplate } from './templates.js';
|
package/dist/mcp/config.js
CHANGED
|
@@ -61,6 +61,6 @@ export function getMCPServer(serverName) {
|
|
|
61
61
|
const projectSettings = manager.loadProjectSettings();
|
|
62
62
|
return projectSettings.mcpServers?.[serverName];
|
|
63
63
|
}
|
|
64
|
-
//
|
|
65
|
-
export
|
|
64
|
+
// Import templates
|
|
65
|
+
export { TEMPLATES as PREDEFINED_SERVERS, getTemplate, hasTemplate, generateConfigFromTemplate } from './templates.js';
|
|
66
66
|
//# sourceMappingURL=config.js.map
|
package/dist/mcp/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Health Monitoring
|
|
3
|
+
*
|
|
4
|
+
* Provides health checking, status monitoring, and automatic reconnection
|
|
5
|
+
* for MCP servers.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import type { MCPManager } from './client.js';
|
|
9
|
+
/**
|
|
10
|
+
* Health status for an MCP server
|
|
11
|
+
*/
|
|
12
|
+
export interface ServerHealth {
|
|
13
|
+
/** Server name */
|
|
14
|
+
serverName: string;
|
|
15
|
+
/** Connection status */
|
|
16
|
+
connected: boolean;
|
|
17
|
+
/** Number of available tools */
|
|
18
|
+
toolCount: number;
|
|
19
|
+
/** Server uptime in milliseconds */
|
|
20
|
+
uptime?: number;
|
|
21
|
+
/** Connection start time */
|
|
22
|
+
connectedAt?: number;
|
|
23
|
+
/** Last successful call timestamp */
|
|
24
|
+
lastSuccess?: number;
|
|
25
|
+
/** Last error message */
|
|
26
|
+
lastError?: string;
|
|
27
|
+
/** Last error timestamp */
|
|
28
|
+
lastErrorAt?: number;
|
|
29
|
+
/** Total number of successful tool calls */
|
|
30
|
+
successCount: number;
|
|
31
|
+
/** Total number of failed tool calls */
|
|
32
|
+
failureCount: number;
|
|
33
|
+
/** Average latency in milliseconds */
|
|
34
|
+
avgLatency?: number;
|
|
35
|
+
/** P95 latency in milliseconds */
|
|
36
|
+
p95Latency?: number;
|
|
37
|
+
/** Success rate percentage (0-100) */
|
|
38
|
+
successRate: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Health check event types
|
|
42
|
+
*/
|
|
43
|
+
export interface HealthCheckEvents {
|
|
44
|
+
'health-check': (health: ServerHealth) => void;
|
|
45
|
+
'server-disconnected': (serverName: string) => void;
|
|
46
|
+
'server-reconnected': (serverName: string) => void;
|
|
47
|
+
'health-check-error': (serverName: string, error: Error) => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* MCP Health Monitor
|
|
51
|
+
*
|
|
52
|
+
* Monitors the health of MCP servers and provides automatic reconnection
|
|
53
|
+
*/
|
|
54
|
+
export declare class MCPHealthMonitor extends EventEmitter {
|
|
55
|
+
private mcpManager;
|
|
56
|
+
private healthCheckInterval;
|
|
57
|
+
private serverStats;
|
|
58
|
+
constructor(mcpManager: MCPManager);
|
|
59
|
+
/**
|
|
60
|
+
* Start health monitoring with specified interval
|
|
61
|
+
*/
|
|
62
|
+
start(intervalMs?: number): void;
|
|
63
|
+
/**
|
|
64
|
+
* Stop health monitoring
|
|
65
|
+
*/
|
|
66
|
+
stop(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Perform health checks on all servers
|
|
69
|
+
*/
|
|
70
|
+
private performHealthChecks;
|
|
71
|
+
/**
|
|
72
|
+
* Check health of a specific server
|
|
73
|
+
*/
|
|
74
|
+
checkServerHealth(serverName: string): Promise<ServerHealth>;
|
|
75
|
+
/**
|
|
76
|
+
* Record a successful tool call
|
|
77
|
+
*/
|
|
78
|
+
recordSuccess(serverName: string, latencyMs: number): void;
|
|
79
|
+
/**
|
|
80
|
+
* Record a failed tool call
|
|
81
|
+
*/
|
|
82
|
+
recordFailure(serverName: string, error: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Attempt to reconnect to a disconnected server
|
|
85
|
+
*/
|
|
86
|
+
private attemptReconnection;
|
|
87
|
+
/**
|
|
88
|
+
* Calculate percentile from array of values
|
|
89
|
+
*/
|
|
90
|
+
private calculatePercentile;
|
|
91
|
+
/**
|
|
92
|
+
* Get health report for all servers
|
|
93
|
+
*/
|
|
94
|
+
getHealthReport(): Promise<ServerHealth[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Get health status for a specific server
|
|
97
|
+
*/
|
|
98
|
+
getServerStatus(serverName: string): Promise<ServerHealth | null>;
|
|
99
|
+
/**
|
|
100
|
+
* Reset stats for a server
|
|
101
|
+
*/
|
|
102
|
+
resetStats(serverName: string): void;
|
|
103
|
+
/**
|
|
104
|
+
* Get formatted uptime string
|
|
105
|
+
*/
|
|
106
|
+
static formatUptime(uptimeMs: number): string;
|
|
107
|
+
/**
|
|
108
|
+
* Get formatted latency string
|
|
109
|
+
*/
|
|
110
|
+
static formatLatency(latencyMs: number): string;
|
|
111
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Health Monitoring
|
|
3
|
+
*
|
|
4
|
+
* Provides health checking, status monitoring, and automatic reconnection
|
|
5
|
+
* for MCP servers.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
/**
|
|
9
|
+
* MCP Health Monitor
|
|
10
|
+
*
|
|
11
|
+
* Monitors the health of MCP servers and provides automatic reconnection
|
|
12
|
+
*/
|
|
13
|
+
export class MCPHealthMonitor extends EventEmitter {
|
|
14
|
+
mcpManager;
|
|
15
|
+
healthCheckInterval = null;
|
|
16
|
+
serverStats = new Map();
|
|
17
|
+
constructor(mcpManager) {
|
|
18
|
+
super();
|
|
19
|
+
this.mcpManager = mcpManager;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Start health monitoring with specified interval
|
|
23
|
+
*/
|
|
24
|
+
start(intervalMs = 60000) {
|
|
25
|
+
if (this.healthCheckInterval) {
|
|
26
|
+
throw new Error('Health monitoring already started');
|
|
27
|
+
}
|
|
28
|
+
// Initialize stats for existing servers
|
|
29
|
+
const servers = this.mcpManager.getServers();
|
|
30
|
+
for (const serverName of servers) {
|
|
31
|
+
if (!this.serverStats.has(serverName)) {
|
|
32
|
+
this.serverStats.set(serverName, {
|
|
33
|
+
connectedAt: Date.now(),
|
|
34
|
+
successCount: 0,
|
|
35
|
+
failureCount: 0,
|
|
36
|
+
latencies: [],
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
this.healthCheckInterval = setInterval(async () => {
|
|
41
|
+
await this.performHealthChecks();
|
|
42
|
+
}, intervalMs);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Stop health monitoring
|
|
46
|
+
*/
|
|
47
|
+
stop() {
|
|
48
|
+
if (this.healthCheckInterval) {
|
|
49
|
+
clearInterval(this.healthCheckInterval);
|
|
50
|
+
this.healthCheckInterval = null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Perform health checks on all servers
|
|
55
|
+
*/
|
|
56
|
+
async performHealthChecks() {
|
|
57
|
+
const servers = this.mcpManager.getServers();
|
|
58
|
+
for (const serverName of servers) {
|
|
59
|
+
try {
|
|
60
|
+
const health = await this.checkServerHealth(serverName);
|
|
61
|
+
this.emit('health-check', health);
|
|
62
|
+
// Check if server is unhealthy
|
|
63
|
+
if (!health.connected && health.successRate < 50) {
|
|
64
|
+
this.emit('server-disconnected', serverName);
|
|
65
|
+
await this.attemptReconnection(serverName);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
this.emit('health-check-error', serverName, error);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check health of a specific server
|
|
75
|
+
*/
|
|
76
|
+
async checkServerHealth(serverName) {
|
|
77
|
+
const tools = this.mcpManager.getTools().filter((t) => t.serverName === serverName);
|
|
78
|
+
// Initialize stats if not present
|
|
79
|
+
if (!this.serverStats.has(serverName)) {
|
|
80
|
+
this.serverStats.set(serverName, {
|
|
81
|
+
connectedAt: Date.now(),
|
|
82
|
+
successCount: 0,
|
|
83
|
+
failureCount: 0,
|
|
84
|
+
latencies: [],
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const stats = this.serverStats.get(serverName);
|
|
88
|
+
// Calculate success rate
|
|
89
|
+
const total = stats.successCount + stats.failureCount;
|
|
90
|
+
const successRate = total > 0 ? (stats.successCount / total) * 100 : 100;
|
|
91
|
+
// Calculate latencies
|
|
92
|
+
const avgLatency = stats.latencies.length > 0
|
|
93
|
+
? stats.latencies.reduce((a, b) => a + b, 0) / stats.latencies.length
|
|
94
|
+
: undefined;
|
|
95
|
+
const p95Latency = stats.latencies.length > 0
|
|
96
|
+
? this.calculatePercentile(stats.latencies, 0.95)
|
|
97
|
+
: undefined;
|
|
98
|
+
// Calculate uptime
|
|
99
|
+
const uptime = Date.now() - stats.connectedAt;
|
|
100
|
+
return {
|
|
101
|
+
serverName,
|
|
102
|
+
connected: tools.length > 0,
|
|
103
|
+
toolCount: tools.length,
|
|
104
|
+
uptime,
|
|
105
|
+
connectedAt: stats.connectedAt,
|
|
106
|
+
lastSuccess: stats.lastSuccess,
|
|
107
|
+
lastError: stats.lastError,
|
|
108
|
+
lastErrorAt: stats.lastErrorAt,
|
|
109
|
+
successCount: stats.successCount,
|
|
110
|
+
failureCount: stats.failureCount,
|
|
111
|
+
avgLatency,
|
|
112
|
+
p95Latency,
|
|
113
|
+
successRate,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Record a successful tool call
|
|
118
|
+
*/
|
|
119
|
+
recordSuccess(serverName, latencyMs) {
|
|
120
|
+
// Initialize stats if not present
|
|
121
|
+
if (!this.serverStats.has(serverName)) {
|
|
122
|
+
this.serverStats.set(serverName, {
|
|
123
|
+
connectedAt: Date.now(),
|
|
124
|
+
successCount: 0,
|
|
125
|
+
failureCount: 0,
|
|
126
|
+
latencies: [],
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const stats = this.serverStats.get(serverName);
|
|
130
|
+
stats.successCount++;
|
|
131
|
+
stats.lastSuccess = Date.now();
|
|
132
|
+
stats.latencies.push(latencyMs);
|
|
133
|
+
// Keep only last 100 latencies
|
|
134
|
+
if (stats.latencies.length > 100) {
|
|
135
|
+
stats.latencies.shift();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Record a failed tool call
|
|
140
|
+
*/
|
|
141
|
+
recordFailure(serverName, error) {
|
|
142
|
+
// Initialize stats if not present
|
|
143
|
+
if (!this.serverStats.has(serverName)) {
|
|
144
|
+
this.serverStats.set(serverName, {
|
|
145
|
+
connectedAt: Date.now(),
|
|
146
|
+
successCount: 0,
|
|
147
|
+
failureCount: 0,
|
|
148
|
+
latencies: [],
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
const stats = this.serverStats.get(serverName);
|
|
152
|
+
stats.failureCount++;
|
|
153
|
+
stats.lastError = error;
|
|
154
|
+
stats.lastErrorAt = Date.now();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Attempt to reconnect to a disconnected server
|
|
158
|
+
*/
|
|
159
|
+
async attemptReconnection(serverName) {
|
|
160
|
+
try {
|
|
161
|
+
// Get server configuration (if available)
|
|
162
|
+
// Note: This would require extending MCPManager to expose config
|
|
163
|
+
// For now, we just emit an event
|
|
164
|
+
this.emit('server-reconnected', serverName);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
this.emit('health-check-error', serverName, error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Calculate percentile from array of values
|
|
172
|
+
*/
|
|
173
|
+
calculatePercentile(values, percentile) {
|
|
174
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
175
|
+
const index = Math.ceil(sorted.length * percentile) - 1;
|
|
176
|
+
return sorted[index] || 0;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get health report for all servers
|
|
180
|
+
*/
|
|
181
|
+
async getHealthReport() {
|
|
182
|
+
const servers = this.mcpManager.getServers();
|
|
183
|
+
const report = [];
|
|
184
|
+
for (const serverName of servers) {
|
|
185
|
+
const health = await this.checkServerHealth(serverName);
|
|
186
|
+
report.push(health);
|
|
187
|
+
}
|
|
188
|
+
return report;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get health status for a specific server
|
|
192
|
+
*/
|
|
193
|
+
async getServerStatus(serverName) {
|
|
194
|
+
const servers = this.mcpManager.getServers();
|
|
195
|
+
if (!servers.includes(serverName)) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
return await this.checkServerHealth(serverName);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Reset stats for a server
|
|
202
|
+
*/
|
|
203
|
+
resetStats(serverName) {
|
|
204
|
+
this.serverStats.set(serverName, {
|
|
205
|
+
connectedAt: Date.now(),
|
|
206
|
+
successCount: 0,
|
|
207
|
+
failureCount: 0,
|
|
208
|
+
latencies: [],
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get formatted uptime string
|
|
213
|
+
*/
|
|
214
|
+
static formatUptime(uptimeMs) {
|
|
215
|
+
const seconds = Math.floor(uptimeMs / 1000);
|
|
216
|
+
const minutes = Math.floor(seconds / 60);
|
|
217
|
+
const hours = Math.floor(minutes / 60);
|
|
218
|
+
const days = Math.floor(hours / 24);
|
|
219
|
+
if (days > 0) {
|
|
220
|
+
return `${days}d ${hours % 24}h`;
|
|
221
|
+
}
|
|
222
|
+
else if (hours > 0) {
|
|
223
|
+
return `${hours}h ${minutes % 60}m`;
|
|
224
|
+
}
|
|
225
|
+
else if (minutes > 0) {
|
|
226
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
return `${seconds}s`;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get formatted latency string
|
|
234
|
+
*/
|
|
235
|
+
static formatLatency(latencyMs) {
|
|
236
|
+
if (latencyMs < 1000) {
|
|
237
|
+
return `${Math.round(latencyMs)}ms`;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
return `${(latencyMs / 1000).toFixed(2)}s`;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/mcp/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured MCP server templates for popular services
|
|
3
|
+
* Enables one-command setup: ax-cli mcp add <name> --template
|
|
4
|
+
*/
|
|
5
|
+
import { MCPServerConfig } from '../schemas/settings-schemas.js';
|
|
6
|
+
export interface MCPServerTemplate {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
category: 'design' | 'deployment' | 'testing' | 'monitoring' | 'backend' | 'version-control';
|
|
10
|
+
officialServer: boolean;
|
|
11
|
+
config: MCPServerConfig;
|
|
12
|
+
requiredEnv: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
url?: string;
|
|
16
|
+
}>;
|
|
17
|
+
setupInstructions: string;
|
|
18
|
+
usageExamples: string[];
|
|
19
|
+
troubleshooting: Array<{
|
|
20
|
+
issue: string;
|
|
21
|
+
solution: string;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Pre-configured templates for popular MCP servers
|
|
26
|
+
* Focus on front-end development tools
|
|
27
|
+
*/
|
|
28
|
+
export declare const TEMPLATES: Record<string, MCPServerTemplate>;
|
|
29
|
+
/**
|
|
30
|
+
* Get all available template names
|
|
31
|
+
*/
|
|
32
|
+
export declare function getTemplateNames(): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Get template by name
|
|
35
|
+
*/
|
|
36
|
+
export declare function getTemplate(name: string): MCPServerTemplate | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Get templates by category
|
|
39
|
+
*/
|
|
40
|
+
export declare function getTemplatesByCategory(category: MCPServerTemplate['category']): MCPServerTemplate[];
|
|
41
|
+
/**
|
|
42
|
+
* Search templates by keyword
|
|
43
|
+
*/
|
|
44
|
+
export declare function searchTemplates(query: string): MCPServerTemplate[];
|
|
45
|
+
/**
|
|
46
|
+
* Check if a template exists
|
|
47
|
+
*/
|
|
48
|
+
export declare function hasTemplate(name: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Generate MCP config from template with environment variables
|
|
51
|
+
*/
|
|
52
|
+
export declare function generateConfigFromTemplate(templateName: string, envVars: Record<string, string>): MCPServerConfig;
|