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;
  }
}