@agent-deck/backend 1.1.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/dist/.tsbuildinfo +1 -0
- package/dist/cli-runtime.d.ts +4 -0
- package/dist/cli-runtime.d.ts.map +1 -0
- package/dist/cli-runtime.js +12 -0
- package/dist/cli-runtime.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-deck-context.d.ts +8 -0
- package/dist/lib/agent-deck-context.d.ts.map +1 -0
- package/dist/lib/agent-deck-context.js +48 -0
- package/dist/lib/agent-deck-context.js.map +1 -0
- package/dist/lib/bound-deck-scope.d.ts +15 -0
- package/dist/lib/bound-deck-scope.d.ts.map +1 -0
- package/dist/lib/bound-deck-scope.js +68 -0
- package/dist/lib/bound-deck-scope.js.map +1 -0
- package/dist/lib/client-scope.d.ts +14 -0
- package/dist/lib/client-scope.d.ts.map +1 -0
- package/dist/lib/client-scope.js +46 -0
- package/dist/lib/client-scope.js.map +1 -0
- package/dist/lib/paths.d.ts +2 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +24 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/version.d.ts +3 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +20 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/mcp-index.d.ts +2 -0
- package/dist/mcp-index.d.ts.map +1 -0
- package/dist/mcp-index.js +32 -0
- package/dist/mcp-index.js.map +1 -0
- package/dist/mcp-server.d.ts +25 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +1121 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-stdio.d.ts +2 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/models/database.d.ts +64 -0
- package/dist/models/database.d.ts.map +1 -0
- package/dist/models/database.js +965 -0
- package/dist/models/database.js.map +1 -0
- package/dist/playbooks/playbook-manager.d.ts +29 -0
- package/dist/playbooks/playbook-manager.d.ts.map +1 -0
- package/dist/playbooks/playbook-manager.js +198 -0
- package/dist/playbooks/playbook-manager.js.map +1 -0
- package/dist/playbooks/playbook-parser.d.ts +8 -0
- package/dist/playbooks/playbook-parser.d.ts.map +1 -0
- package/dist/playbooks/playbook-parser.js +76 -0
- package/dist/playbooks/playbook-parser.js.map +1 -0
- package/dist/playbooks/playbook-service.d.ts +9 -0
- package/dist/playbooks/playbook-service.d.ts.map +1 -0
- package/dist/playbooks/playbook-service.js +107 -0
- package/dist/playbooks/playbook-service.js.map +1 -0
- package/dist/routes/collection.d.ts +3 -0
- package/dist/routes/collection.d.ts.map +1 -0
- package/dist/routes/collection.js +34 -0
- package/dist/routes/collection.js.map +1 -0
- package/dist/routes/credentials.d.ts +3 -0
- package/dist/routes/credentials.d.ts.map +1 -0
- package/dist/routes/credentials.js +241 -0
- package/dist/routes/credentials.js.map +1 -0
- package/dist/routes/decks.d.ts +3 -0
- package/dist/routes/decks.d.ts.map +1 -0
- package/dist/routes/decks.js +430 -0
- package/dist/routes/decks.js.map +1 -0
- package/dist/routes/local-mcp.d.ts +3 -0
- package/dist/routes/local-mcp.d.ts.map +1 -0
- package/dist/routes/local-mcp.js +189 -0
- package/dist/routes/local-mcp.js.map +1 -0
- package/dist/routes/mcp.d.ts +3 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +170 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/oauth.d.ts +3 -0
- package/dist/routes/oauth.d.ts.map +1 -0
- package/dist/routes/oauth.js +242 -0
- package/dist/routes/oauth.js.map +1 -0
- package/dist/routes/playbooks.d.ts +5 -0
- package/dist/routes/playbooks.d.ts.map +1 -0
- package/dist/routes/playbooks.js +220 -0
- package/dist/routes/playbooks.js.map +1 -0
- package/dist/routes/scope.d.ts +3 -0
- package/dist/routes/scope.d.ts.map +1 -0
- package/dist/routes/scope.js +107 -0
- package/dist/routes/scope.js.map +1 -0
- package/dist/routes/services.d.ts +3 -0
- package/dist/routes/services.d.ts.map +1 -0
- package/dist/routes/services.js +281 -0
- package/dist/routes/services.js.map +1 -0
- package/dist/routes/websocket.d.ts +11 -0
- package/dist/routes/websocket.d.ts.map +1 -0
- package/dist/routes/websocket.js +154 -0
- package/dist/routes/websocket.js.map +1 -0
- package/dist/scope/repo-deck.d.ts +10 -0
- package/dist/scope/repo-deck.d.ts.map +1 -0
- package/dist/scope/repo-deck.js +63 -0
- package/dist/scope/repo-deck.js.map +1 -0
- package/dist/server/index.d.ts +24 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +111 -0
- package/dist/server/index.js.map +1 -0
- package/dist/services/collection-warning-service.d.ts +18 -0
- package/dist/services/collection-warning-service.d.ts.map +1 -0
- package/dist/services/collection-warning-service.js +129 -0
- package/dist/services/collection-warning-service.js.map +1 -0
- package/dist/services/config-manager.d.ts +32 -0
- package/dist/services/config-manager.d.ts.map +1 -0
- package/dist/services/config-manager.js +119 -0
- package/dist/services/config-manager.js.map +1 -0
- package/dist/services/icon-resolver.d.ts +20 -0
- package/dist/services/icon-resolver.d.ts.map +1 -0
- package/dist/services/icon-resolver.js +224 -0
- package/dist/services/icon-resolver.js.map +1 -0
- package/dist/services/local-mcp-server-manager.d.ts +51 -0
- package/dist/services/local-mcp-server-manager.d.ts.map +1 -0
- package/dist/services/local-mcp-server-manager.js +246 -0
- package/dist/services/local-mcp-server-manager.js.map +1 -0
- package/dist/services/mcp-client-manager.d.ts +22 -0
- package/dist/services/mcp-client-manager.d.ts.map +1 -0
- package/dist/services/mcp-client-manager.js +257 -0
- package/dist/services/mcp-client-manager.js.map +1 -0
- package/dist/services/mcp-discovery-service.d.ts +31 -0
- package/dist/services/mcp-discovery-service.d.ts.map +1 -0
- package/dist/services/mcp-discovery-service.js +164 -0
- package/dist/services/mcp-discovery-service.js.map +1 -0
- package/dist/services/oauth-manager.d.ts +25 -0
- package/dist/services/oauth-manager.d.ts.map +1 -0
- package/dist/services/oauth-manager.js +365 -0
- package/dist/services/oauth-manager.js.map +1 -0
- package/dist/services/service-manager.d.ts +61 -0
- package/dist/services/service-manager.d.ts.map +1 -0
- package/dist/services/service-manager.js +447 -0
- package/dist/services/service-manager.js.map +1 -0
- package/dist/test-local-mcp-e2e.d.ts +3 -0
- package/dist/test-local-mcp-e2e.d.ts.map +1 -0
- package/dist/test-local-mcp-e2e.js +104 -0
- package/dist/test-local-mcp-e2e.js.map +1 -0
- package/dist/test-local-mcp.d.ts +3 -0
- package/dist/test-local-mcp.d.ts.map +1 -0
- package/dist/test-local-mcp.js +54 -0
- package/dist/test-local-mcp.js.map +1 -0
- package/dist/vault/credential-manager.d.ts +45 -0
- package/dist/vault/credential-manager.d.ts.map +1 -0
- package/dist/vault/credential-manager.js +237 -0
- package/dist/vault/credential-manager.js.map +1 -0
- package/dist/vault/index.d.ts +4 -0
- package/dist/vault/index.d.ts.map +1 -0
- package/dist/vault/index.js +20 -0
- package/dist/vault/index.js.map +1 -0
- package/dist/vault/secret-store.d.ts +36 -0
- package/dist/vault/secret-store.d.ts.map +1 -0
- package/dist/vault/secret-store.js +207 -0
- package/dist/vault/secret-store.js.map +1 -0
- package/dist/vault/yaml-sync.d.ts +8 -0
- package/dist/vault/yaml-sync.d.ts.map +1 -0
- package/dist/vault/yaml-sync.js +60 -0
- package/dist/vault/yaml-sync.js.map +1 -0
- package/package.json +64 -0
- package/static-ui/assets/AgentDeckLogo2-z3pVqJJ3.png +0 -0
- package/static-ui/assets/index-BnA3AsqY.css +1 -0
- package/static-ui/assets/index-D1IuraRt.js +334 -0
- package/static-ui/favicon.png +0 -0
- package/static-ui/index.html +17 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LocalMCPServerManager = void 0;
|
|
4
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
|
|
6
|
+
const shared_1 = require("@agent-deck/shared");
|
|
7
|
+
class LocalMCPServerManager {
|
|
8
|
+
processes = new Map();
|
|
9
|
+
clients = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Start a local MCP server process
|
|
12
|
+
*/
|
|
13
|
+
async startLocalServer(service) {
|
|
14
|
+
if (!service.localCommand) {
|
|
15
|
+
throw new Error('Local command not configured for service');
|
|
16
|
+
}
|
|
17
|
+
const processId = (0, shared_1.generateId)();
|
|
18
|
+
console.log(`๐ Starting local MCP server: ${service.name} (${service.localCommand} ${service.localArgs?.join(' ')})`);
|
|
19
|
+
try {
|
|
20
|
+
// Prepare environment variables
|
|
21
|
+
const env = {};
|
|
22
|
+
// Copy process.env, filtering out undefined values
|
|
23
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
24
|
+
if (value !== undefined) {
|
|
25
|
+
env[key] = value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Add service-specific environment variables
|
|
29
|
+
if (service.localEnv) {
|
|
30
|
+
Object.assign(env, service.localEnv);
|
|
31
|
+
}
|
|
32
|
+
// Create MCP client with stdio transport
|
|
33
|
+
const client = new index_js_1.Client({
|
|
34
|
+
name: 'agent-deck-local-mcp-client',
|
|
35
|
+
version: '1.0.0'
|
|
36
|
+
});
|
|
37
|
+
const transport = new stdio_js_1.StdioClientTransport({
|
|
38
|
+
command: service.localCommand,
|
|
39
|
+
args: service.localArgs || [],
|
|
40
|
+
cwd: service.localWorkingDir,
|
|
41
|
+
env: env,
|
|
42
|
+
});
|
|
43
|
+
// Connect to the local server
|
|
44
|
+
await client.connect(transport);
|
|
45
|
+
// Discover capabilities
|
|
46
|
+
const capabilities = await this.discoverCapabilities(client);
|
|
47
|
+
// Create process record
|
|
48
|
+
const processRecord = {
|
|
49
|
+
id: processId,
|
|
50
|
+
serviceId: service.id,
|
|
51
|
+
process: null, // The transport manages the process internally
|
|
52
|
+
isRunning: true,
|
|
53
|
+
startTime: new Date(),
|
|
54
|
+
lastActivity: new Date(),
|
|
55
|
+
capabilities,
|
|
56
|
+
};
|
|
57
|
+
// Store references
|
|
58
|
+
this.processes.set(processId, processRecord);
|
|
59
|
+
this.clients.set(service.id, client);
|
|
60
|
+
console.log(`โ
Local MCP server started: ${service.name}`);
|
|
61
|
+
console.log(`๐ Discovered ${capabilities.tools.length} tools, ${capabilities.resources.length} resources, ${capabilities.prompts.length} prompts`);
|
|
62
|
+
return processRecord;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(`โ Failed to start local MCP server ${service.name}:`, error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Stop a local MCP server process
|
|
71
|
+
*/
|
|
72
|
+
async stopLocalServer(serviceId) {
|
|
73
|
+
const processRecord = Array.from(this.processes.values()).find(p => p.serviceId === serviceId);
|
|
74
|
+
if (!processRecord) {
|
|
75
|
+
console.log(`โ ๏ธ No local server found for service ${serviceId}`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.log(`๐ Stopping local MCP server: ${processRecord.serviceId}`);
|
|
79
|
+
try {
|
|
80
|
+
// Close the MCP client connection (this will also stop the process)
|
|
81
|
+
const client = this.clients.get(serviceId);
|
|
82
|
+
if (client) {
|
|
83
|
+
await client.close();
|
|
84
|
+
this.clients.delete(serviceId);
|
|
85
|
+
}
|
|
86
|
+
// Remove from tracking
|
|
87
|
+
this.processes.delete(processRecord.id);
|
|
88
|
+
console.log(`โ
Local MCP server stopped: ${serviceId}`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(`โ Error stopping local MCP server ${serviceId}:`, error);
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get a local MCP server process
|
|
97
|
+
*/
|
|
98
|
+
getLocalServer(serviceId) {
|
|
99
|
+
return Array.from(this.processes.values()).find(p => p.serviceId === serviceId);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get the MCP client for a local server
|
|
103
|
+
*/
|
|
104
|
+
getClient(serviceId) {
|
|
105
|
+
return this.clients.get(serviceId);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if a local server is running
|
|
109
|
+
*/
|
|
110
|
+
isLocalServerRunning(serviceId) {
|
|
111
|
+
const processRecord = this.getLocalServer(serviceId);
|
|
112
|
+
return processRecord?.isRunning || false;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Discover capabilities of a local MCP server
|
|
116
|
+
*/
|
|
117
|
+
async discoverCapabilities(client) {
|
|
118
|
+
try {
|
|
119
|
+
const [toolsResponse, resources, prompts] = await Promise.all([
|
|
120
|
+
client.listTools().catch(() => ({ tools: [] })),
|
|
121
|
+
client.listResources().catch(() => []),
|
|
122
|
+
client.listPrompts().catch(() => []),
|
|
123
|
+
]);
|
|
124
|
+
// Handle tools response - it might be an object with a tools property or a direct array
|
|
125
|
+
const tools = Array.isArray(toolsResponse) ? toolsResponse : toolsResponse?.tools || [];
|
|
126
|
+
return {
|
|
127
|
+
tools: tools.map((tool) => ({
|
|
128
|
+
name: tool.name || tool.title || 'Unknown Tool',
|
|
129
|
+
description: tool.description || '',
|
|
130
|
+
inputSchema: tool.inputSchema || {},
|
|
131
|
+
})),
|
|
132
|
+
resources: resources || [],
|
|
133
|
+
prompts: (prompts || []).map((prompt) => prompt.name || 'Unknown Prompt'),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.error('โ Failed to discover capabilities:', error);
|
|
138
|
+
return {
|
|
139
|
+
tools: [],
|
|
140
|
+
resources: [],
|
|
141
|
+
prompts: [],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Call a tool on a local MCP server
|
|
147
|
+
*/
|
|
148
|
+
async callTool(serviceId, toolName, arguments_) {
|
|
149
|
+
const client = this.clients.get(serviceId);
|
|
150
|
+
if (!client) {
|
|
151
|
+
throw new Error(`No local MCP client found for service ${serviceId}`);
|
|
152
|
+
}
|
|
153
|
+
const processRecord = this.getLocalServer(serviceId);
|
|
154
|
+
if (!processRecord?.isRunning) {
|
|
155
|
+
throw new Error(`Local MCP server ${serviceId} is not running`);
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
console.log(`๐ง Calling tool ${toolName} on local MCP server ${serviceId}`);
|
|
159
|
+
// Update last activity
|
|
160
|
+
processRecord.lastActivity = new Date();
|
|
161
|
+
// Call the tool
|
|
162
|
+
const result = await client.callTool({
|
|
163
|
+
name: toolName,
|
|
164
|
+
arguments: arguments_ || {},
|
|
165
|
+
});
|
|
166
|
+
console.log(`โ
Successfully called tool ${toolName} on local server ${serviceId}`);
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
console.error(`โ Failed to call tool ${toolName} on local server ${serviceId}:`, error);
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get a resource from a local MCP server
|
|
176
|
+
*/
|
|
177
|
+
async getResource(serviceId, resourceUri) {
|
|
178
|
+
const client = this.clients.get(serviceId);
|
|
179
|
+
if (!client) {
|
|
180
|
+
throw new Error(`No local MCP client found for service ${serviceId}`);
|
|
181
|
+
}
|
|
182
|
+
const processRecord = this.getLocalServer(serviceId);
|
|
183
|
+
if (!processRecord?.isRunning) {
|
|
184
|
+
throw new Error(`Local MCP server ${serviceId} is not running`);
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
console.log(`๐ Getting resource ${resourceUri} from local MCP server ${serviceId}`);
|
|
188
|
+
// Update last activity
|
|
189
|
+
processRecord.lastActivity = new Date();
|
|
190
|
+
// Get the resource
|
|
191
|
+
const result = await client.readResource({
|
|
192
|
+
uri: resourceUri,
|
|
193
|
+
});
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.error(`โ Failed to get resource ${resourceUri} from local server ${serviceId}:`, error);
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get a prompt from a local MCP server
|
|
203
|
+
*/
|
|
204
|
+
async getPrompt(serviceId, promptName, arguments_) {
|
|
205
|
+
const client = this.clients.get(serviceId);
|
|
206
|
+
if (!client) {
|
|
207
|
+
throw new Error(`No local MCP client found for service ${serviceId}`);
|
|
208
|
+
}
|
|
209
|
+
const processRecord = this.getLocalServer(serviceId);
|
|
210
|
+
if (!processRecord?.isRunning) {
|
|
211
|
+
throw new Error(`Local MCP server ${serviceId} is not running`);
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
console.log(`๐ Getting prompt ${promptName} from local MCP server ${serviceId}`);
|
|
215
|
+
// Update last activity
|
|
216
|
+
processRecord.lastActivity = new Date();
|
|
217
|
+
// Get the prompt
|
|
218
|
+
const result = await client.getPrompt({
|
|
219
|
+
name: promptName,
|
|
220
|
+
arguments: arguments_ || {},
|
|
221
|
+
});
|
|
222
|
+
return result;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.error(`โ Failed to get prompt ${promptName} from local server ${serviceId}:`, error);
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get all running local servers
|
|
231
|
+
*/
|
|
232
|
+
getAllRunningServers() {
|
|
233
|
+
return Array.from(this.processes.values()).filter(p => p.isRunning);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Cleanup all local servers
|
|
237
|
+
*/
|
|
238
|
+
async cleanup() {
|
|
239
|
+
console.log(`๐งน Cleaning up ${this.processes.size} local MCP server processes`);
|
|
240
|
+
const stopPromises = Array.from(this.processes.values()).map(processRecord => this.stopLocalServer(processRecord.serviceId));
|
|
241
|
+
await Promise.all(stopPromises);
|
|
242
|
+
console.log(`โ
Cleanup completed`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.LocalMCPServerManager = LocalMCPServerManager;
|
|
246
|
+
//# sourceMappingURL=local-mcp-server-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-mcp-server-manager.js","sourceRoot":"","sources":["../../src/services/local-mcp-server-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Service, ServiceTool } from '@agent-deck/shared';
|
|
2
|
+
interface MCPResource {
|
|
3
|
+
uri: string;
|
|
4
|
+
mimeType: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class MCPClientManager {
|
|
9
|
+
private clients;
|
|
10
|
+
private localServerManager;
|
|
11
|
+
constructor();
|
|
12
|
+
private getClient;
|
|
13
|
+
discoverTools(service: Service): Promise<ServiceTool[]>;
|
|
14
|
+
callTool(service: Service, toolName: string, arguments_: any): Promise<any>;
|
|
15
|
+
discoverResources(service: Service): Promise<MCPResource[]>;
|
|
16
|
+
getResource(service: Service, resourceUri: string): Promise<any>;
|
|
17
|
+
listPrompts(service: Service): Promise<string[]>;
|
|
18
|
+
getPrompt(service: Service, promptName: string, arguments_?: Record<string, any>): Promise<any>;
|
|
19
|
+
cleanup(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=mcp-client-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client-manager.d.ts","sourceRoot":"","sources":["../../src/services/mcp-client-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAY1D,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,kBAAkB,CAAwB;;YAMpC,SAAS;IAkFjB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8CvD,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB3E,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAuC3D,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAuBhE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBhD,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB/F,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAe/B"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MCPClientManager = void 0;
|
|
4
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
|
|
5
|
+
const sse_js_1 = require("@modelcontextprotocol/sdk/client/sse.js");
|
|
6
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
7
|
+
const local_mcp_server_manager_1 = require("./local-mcp-server-manager");
|
|
8
|
+
class MCPClientManager {
|
|
9
|
+
clients = new Map();
|
|
10
|
+
localServerManager;
|
|
11
|
+
constructor() {
|
|
12
|
+
this.localServerManager = new local_mcp_server_manager_1.LocalMCPServerManager();
|
|
13
|
+
}
|
|
14
|
+
async getClient(service) {
|
|
15
|
+
const clientKey = service.id;
|
|
16
|
+
// Check if this is a local MCP server
|
|
17
|
+
if (service.type === 'local-mcp') {
|
|
18
|
+
// For local servers, we need to start them and get the client from the local manager
|
|
19
|
+
if (!this.localServerManager.isLocalServerRunning(service.id)) {
|
|
20
|
+
await this.localServerManager.startLocalServer(service);
|
|
21
|
+
}
|
|
22
|
+
const client = this.localServerManager.getClient(service.id);
|
|
23
|
+
if (!client) {
|
|
24
|
+
throw new Error(`Failed to get client for local MCP server ${service.id}`);
|
|
25
|
+
}
|
|
26
|
+
return client;
|
|
27
|
+
}
|
|
28
|
+
if (this.clients.has(clientKey)) {
|
|
29
|
+
return this.clients.get(clientKey);
|
|
30
|
+
}
|
|
31
|
+
const client = new index_js_1.Client({
|
|
32
|
+
name: 'agent-deck-mcp-client',
|
|
33
|
+
version: '1.0.0'
|
|
34
|
+
});
|
|
35
|
+
const baseUrl = new URL(service.url);
|
|
36
|
+
// Prepare headers for MCP communication
|
|
37
|
+
const headers = {
|
|
38
|
+
'Accept': 'application/json, text/event-stream',
|
|
39
|
+
'Content-Type': 'application/json'
|
|
40
|
+
};
|
|
41
|
+
// Add OAuth token if available
|
|
42
|
+
if (service.oauthAccessToken) {
|
|
43
|
+
headers['Authorization'] = `Bearer ${service.oauthAccessToken}`;
|
|
44
|
+
}
|
|
45
|
+
// Add custom headers from service configuration
|
|
46
|
+
if (service.headers) {
|
|
47
|
+
try {
|
|
48
|
+
const customHeaders = typeof service.headers === 'string'
|
|
49
|
+
? JSON.parse(service.headers)
|
|
50
|
+
: service.headers;
|
|
51
|
+
Object.assign(headers, customHeaders);
|
|
52
|
+
console.log(`๐ง Using custom headers for service ${service.id}:`, customHeaders);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.warn(`โ ๏ธ Failed to parse custom headers for service ${service.id}:`, error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
// Try StreamableHTTP transport first (modern approach with headers support)
|
|
60
|
+
console.log(`๐ Attempting StreamableHTTP transport for ${service.url} with headers:`, headers);
|
|
61
|
+
const streamableTransport = new streamableHttp_js_1.StreamableHTTPClientTransport(baseUrl, {
|
|
62
|
+
requestInit: {
|
|
63
|
+
headers
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
await client.connect(streamableTransport);
|
|
67
|
+
console.log(`โ
Connected to MCP service ${service.url} using StreamableHTTP transport`);
|
|
68
|
+
}
|
|
69
|
+
catch (streamableError) {
|
|
70
|
+
console.log(`โ ๏ธ StreamableHTTP failed for ${service.url}, trying SSE transport:`, streamableError);
|
|
71
|
+
try {
|
|
72
|
+
// Fallback to SSE transport (legacy approach)
|
|
73
|
+
const sseTransport = new sse_js_1.SSEClientTransport(baseUrl);
|
|
74
|
+
await client.connect(sseTransport);
|
|
75
|
+
console.log(`โ
Connected to MCP service ${service.url} using SSE transport`);
|
|
76
|
+
}
|
|
77
|
+
catch (sseError) {
|
|
78
|
+
console.error(`โ Both StreamableHTTP and SSE failed for ${service.url}`);
|
|
79
|
+
console.error(`StreamableHTTP error:`, streamableError);
|
|
80
|
+
console.error(`SSE error:`, sseError);
|
|
81
|
+
throw new Error(`Failed to connect to MCP service: ${sseError instanceof Error ? sseError.message : 'Unknown error'}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.clients.set(clientKey, client);
|
|
85
|
+
return client;
|
|
86
|
+
}
|
|
87
|
+
async discoverTools(service) {
|
|
88
|
+
try {
|
|
89
|
+
console.log(`๐ Discovering tools for MCP service: ${service.url}`);
|
|
90
|
+
const client = await this.getClient(service);
|
|
91
|
+
// List available tools using the MCP protocol
|
|
92
|
+
const tools = await client.listTools();
|
|
93
|
+
console.log(`๐ Raw tools result from MCP service ${service.url}:`, tools);
|
|
94
|
+
console.log(`๐ Tools type:`, typeof tools);
|
|
95
|
+
console.log(`๐ Tools is array:`, Array.isArray(tools));
|
|
96
|
+
console.log(`๐ Tools structure:`, JSON.stringify(tools, null, 2));
|
|
97
|
+
// Handle different response formats from MCP SDK
|
|
98
|
+
let toolsArray = [];
|
|
99
|
+
if (Array.isArray(tools)) {
|
|
100
|
+
toolsArray = tools;
|
|
101
|
+
}
|
|
102
|
+
else if (tools && typeof tools === 'object' && tools.tools) {
|
|
103
|
+
// MCP SDK might return { tools: [...] }
|
|
104
|
+
toolsArray = Array.isArray(tools.tools) ? tools.tools : [];
|
|
105
|
+
}
|
|
106
|
+
else if (tools && typeof tools === 'object') {
|
|
107
|
+
// Try to extract tools from object structure
|
|
108
|
+
console.log(`๐ Attempting to extract tools from object structure`);
|
|
109
|
+
toolsArray = [];
|
|
110
|
+
}
|
|
111
|
+
console.log(`๐ Final tools array length:`, toolsArray.length);
|
|
112
|
+
// Convert MCP tools to our ServiceTool format
|
|
113
|
+
const serviceTools = toolsArray.map((tool) => ({
|
|
114
|
+
name: tool.name || tool.title || 'Unknown Tool',
|
|
115
|
+
description: tool.description || '',
|
|
116
|
+
inputSchema: tool.inputSchema || {},
|
|
117
|
+
}));
|
|
118
|
+
console.log(`โ
Successfully discovered ${serviceTools.length} tools for ${service.url}`);
|
|
119
|
+
return serviceTools;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error(`โ Failed to discover tools for service ${service.id}:`, error);
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async callTool(service, toolName, arguments_) {
|
|
127
|
+
try {
|
|
128
|
+
console.log(`๐ง Calling tool ${toolName} on MCP service: ${service.url}`);
|
|
129
|
+
// For local servers, use the local manager
|
|
130
|
+
if (service.type === 'local-mcp') {
|
|
131
|
+
return await this.localServerManager.callTool(service.id, toolName, arguments_);
|
|
132
|
+
}
|
|
133
|
+
const client = await this.getClient(service);
|
|
134
|
+
// Call the tool using the MCP protocol
|
|
135
|
+
const result = await client.callTool({
|
|
136
|
+
name: toolName,
|
|
137
|
+
arguments: arguments_ || {},
|
|
138
|
+
});
|
|
139
|
+
console.log(`โ
Successfully called tool ${toolName} on ${service.url}`);
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.error(`โ Failed to call tool ${toolName} for service ${service.id}:`, error);
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async discoverResources(service) {
|
|
148
|
+
try {
|
|
149
|
+
console.log(`๐ Discovering resources for MCP service: ${service.url}`);
|
|
150
|
+
// For local servers, get capabilities from the local manager
|
|
151
|
+
if (service.type === 'local-mcp') {
|
|
152
|
+
const processRecord = this.localServerManager.getLocalServer(service.id);
|
|
153
|
+
if (processRecord?.capabilities?.resources) {
|
|
154
|
+
return processRecord.capabilities.resources.map((resource) => ({
|
|
155
|
+
uri: resource.uri,
|
|
156
|
+
mimeType: resource.mimeType || 'application/json',
|
|
157
|
+
name: resource.name || resource.uri,
|
|
158
|
+
description: resource.description || '',
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
const client = await this.getClient(service);
|
|
164
|
+
// List available resources using the MCP protocol
|
|
165
|
+
const resources = await client.listResources();
|
|
166
|
+
console.log(`๐ Found ${resources.length} resources from MCP service ${service.url}`);
|
|
167
|
+
// Convert MCP resources to our format
|
|
168
|
+
const mcpResources = resources.map((resource) => ({
|
|
169
|
+
uri: resource.uri,
|
|
170
|
+
mimeType: resource.mimeType || 'application/json',
|
|
171
|
+
name: resource.name || resource.uri,
|
|
172
|
+
description: resource.description || '',
|
|
173
|
+
}));
|
|
174
|
+
return mcpResources;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
console.error(`โ Failed to discover resources for service ${service.id}:`, error);
|
|
178
|
+
throw error;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async getResource(service, resourceUri) {
|
|
182
|
+
try {
|
|
183
|
+
console.log(`๐ Getting resource ${resourceUri} from MCP service: ${service.url}`);
|
|
184
|
+
// For local servers, use the local manager
|
|
185
|
+
if (service.type === 'local-mcp') {
|
|
186
|
+
return await this.localServerManager.getResource(service.id, resourceUri);
|
|
187
|
+
}
|
|
188
|
+
const client = await this.getClient(service);
|
|
189
|
+
// Read the resource using the MCP protocol
|
|
190
|
+
const resource = await client.readResource({
|
|
191
|
+
uri: resourceUri,
|
|
192
|
+
});
|
|
193
|
+
return resource;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
console.error(`โ Failed to get resource ${resourceUri} for service ${service.id}:`, error);
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async listPrompts(service) {
|
|
201
|
+
try {
|
|
202
|
+
console.log(`๐ Listing prompts for MCP service: ${service.url}`);
|
|
203
|
+
// For local servers, get capabilities from the local manager
|
|
204
|
+
if (service.type === 'local-mcp') {
|
|
205
|
+
const processRecord = this.localServerManager.getLocalServer(service.id);
|
|
206
|
+
return processRecord?.capabilities?.prompts || [];
|
|
207
|
+
}
|
|
208
|
+
const client = await this.getClient(service);
|
|
209
|
+
// List available prompts using the MCP protocol
|
|
210
|
+
const prompts = await client.listPrompts();
|
|
211
|
+
console.log(`๐ Found ${prompts.length} prompts from MCP service ${service.url}`);
|
|
212
|
+
return prompts.map((prompt) => prompt.name);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
console.error(`โ Failed to list prompts for service ${service.id}:`, error);
|
|
216
|
+
throw error;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async getPrompt(service, promptName, arguments_) {
|
|
220
|
+
try {
|
|
221
|
+
console.log(`๐ Getting prompt ${promptName} from MCP service: ${service.url}`);
|
|
222
|
+
// For local servers, use the local manager
|
|
223
|
+
if (service.type === 'local-mcp') {
|
|
224
|
+
return await this.localServerManager.getPrompt(service.id, promptName, arguments_);
|
|
225
|
+
}
|
|
226
|
+
const client = await this.getClient(service);
|
|
227
|
+
// Get the prompt using the MCP protocol
|
|
228
|
+
const prompt = await client.getPrompt({
|
|
229
|
+
name: promptName,
|
|
230
|
+
arguments: arguments_ || {},
|
|
231
|
+
});
|
|
232
|
+
return prompt;
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
console.error(`โ Failed to get prompt ${promptName} for service ${service.id}:`, error);
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Cleanup method to close connections
|
|
240
|
+
async cleanup() {
|
|
241
|
+
console.log(`๐งน Cleaning up ${this.clients.size} MCP client connections`);
|
|
242
|
+
for (const [key, client] of this.clients.entries()) {
|
|
243
|
+
try {
|
|
244
|
+
await client.close();
|
|
245
|
+
console.log(`โ
Closed connection for ${key}`);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error(`โ Error closing client for ${key}:`, error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
this.clients.clear();
|
|
252
|
+
// Clean up local servers
|
|
253
|
+
await this.localServerManager.cleanup();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.MCPClientManager = MCPClientManager;
|
|
257
|
+
//# sourceMappingURL=mcp-client-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client-manager.js","sourceRoot":"","sources":["../../src/services/mcp-client-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
interface MCPDiscoveryResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
transport_type: string;
|
|
4
|
+
url: string;
|
|
5
|
+
tools_count: number;
|
|
6
|
+
tools: any[];
|
|
7
|
+
capabilities: {
|
|
8
|
+
supports_tool_discovery: boolean;
|
|
9
|
+
supports_tool_calling: boolean;
|
|
10
|
+
};
|
|
11
|
+
oauth: {
|
|
12
|
+
required: boolean;
|
|
13
|
+
resourceName?: string;
|
|
14
|
+
issuer?: string;
|
|
15
|
+
authorizationUrl?: string;
|
|
16
|
+
tokenUrl?: string;
|
|
17
|
+
scopesSupported?: string[];
|
|
18
|
+
bearerMethodsSupported?: string[];
|
|
19
|
+
provider?: string;
|
|
20
|
+
error?: string;
|
|
21
|
+
};
|
|
22
|
+
health: string;
|
|
23
|
+
error: string | null;
|
|
24
|
+
}
|
|
25
|
+
export declare class MCPDiscoveryService {
|
|
26
|
+
discoverService(url: string): Promise<MCPDiscoveryResult>;
|
|
27
|
+
private tryBasicDiscovery;
|
|
28
|
+
private detectOAuthRequirements;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=mcp-discovery-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-discovery-service.d.ts","sourceRoot":"","sources":["../../src/services/mcp-discovery-service.ts"],"names":[],"mappings":"AAYA,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,YAAY,EAAE;QACZ,uBAAuB,EAAE,OAAO,CAAC;QACjC,qBAAqB,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,qBAAa,mBAAmB;IACxB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAuCjD,iBAAiB;YA0CjB,uBAAuB;CAwFtC"}
|