Spaces:
Runtime error
Runtime error
File size: 2,309 Bytes
24caae0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
// MCP (Model Context Protocol) client implementation
import fetch from 'node-fetch';
// Function to call an MCP server
export async function callMcpServer(server, request) {
try {
console.log(`Calling MCP server: ${server.name} at ${server.endpoint}`);
const headers = {
'Content-Type': 'application/json'
};
// Add authentication if provided
if (server.authToken) {
headers['Authorization'] = `Bearer ${server.authToken}`;
}
const response = await fetch(server.endpoint, {
method: 'POST',
headers,
body: JSON.stringify(request)
});
if (!response.ok) {
const errorText = await response.text();
console.error(`MCP server error: ${response.status}`, errorText);
throw new Error(`MCP server error: ${response.status} - ${errorText}`);
}
return await response.json();
} catch (error) {
console.error(`Error calling MCP server ${server.name}:`, error);
throw error;
}
}
// Function to discover available tools from an MCP server
export async function discoverMcpServerTools(server) {
try {
console.log(`[MCP] Discovering tools from server ${server.name} at ${server.endpoint}`);
const discoveryRequest = {
type: 'discovery'
};
console.log('[MCP] Sending discovery request:', discoveryRequest);
const response = await callMcpServer(server, discoveryRequest);
console.log('[MCP] Discovery response:', response);
const result = {
serverId: server.id,
serverName: server.name,
tools: response.tools || []
};
console.log('[MCP] Processed discovery result:', result);
return result;
} catch (error) {
console.error(`[MCP] Error discovering tools from MCP server ${server.name}:`, error);
return {
serverId: server.id,
serverName: server.name,
tools: [],
error: error.message
};
}
}
// Function to execute a tool on an MCP server
export async function executeMcpTool(server, toolName, parameters) {
try {
const toolRequest = {
type: 'tool_execution',
tool: toolName,
parameters
};
return await callMcpServer(server, toolRequest);
} catch (error) {
console.error(`Error executing tool ${toolName} on MCP server ${server.name}:`, error);
throw error;
}
}
|