moelove's picture
feat: init MCP server (#2)
24caae0 unverified
// 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;
}
}