Spaces:
Runtime error
Runtime error
| // 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; | |
| } | |
| } | |