Skip to main content
Glama

SpiderFoot MCP Server

debug-client.js4.43 kB
// Debug client for MCP server communication import axios from 'axios'; import https from 'https'; class MCPDebugClient { constructor(baseUrl = 'http://localhost:5002') { this.baseUrl = baseUrl; this.axios = axios.create({ baseURL: baseUrl, headers: { 'Content-Type': 'application/json', }, // Disable SSL verification for local testing httpsAgent: new https.Agent({ rejectUnauthorized: false }) }); } async sendRequest(method, params = {}, sessionId = null) { const requestId = Date.now(); const requestData = { jsonrpc: '2.0', method, params, id: requestId }; const headers = {}; if (sessionId) { headers['mcp-session-id'] = sessionId; } console.log('\n=== Sending Request ==='); console.log('URL:', `${this.baseUrl}/mcp`); console.log('Headers:', JSON.stringify(headers, null, 2)); console.log('Body:', JSON.stringify(requestData, null, 2)); try { const response = await this.axios.post('/mcp', requestData, { headers, // Get raw response to access headers transformResponse: (res) => res, // Increase timeout timeout: 10000 }); console.log('\n=== Response ==='); console.log('Status:', response.status, response.statusText); console.log('Headers:', JSON.stringify(response.headers, null, 2)); let responseData; try { responseData = typeof response.data === 'string' ? JSON.parse(response.data) : response.data; console.log('Data:', JSON.stringify(responseData, null, 2)); } catch (e) { console.log('Raw Data:', response.data); throw new Error('Failed to parse response as JSON'); } // Check for JSON-RPC error if (responseData && responseData.error) { console.error('JSON-RPC Error:', responseData.error); throw new Error(`JSON-RPC Error (${responseData.error.code}): ${responseData.error.message}`); } return { headers: response.headers, data: responseData, status: response.status, statusText: response.statusText }; } catch (error) { console.error('\n=== Request Failed ==='); if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx console.error('Response Status:', error.response.status); console.error('Response Headers:', error.response.headers); console.error('Response Data:', error.response.data); } else if (error.request) { // The request was made but no response was received console.error('No response received:', error.request); } else { // Something happened in setting up the request that triggered an Error console.error('Request setup error:', error.message); } console.error('Error details:', error.config); throw error; } } } // Example usage async function main() { const client = new MCPDebugClient(); try { // 1. Try to initialize a session console.log('\n=== Testing MCP Server ==='); console.log('1. Attempting to initialize session...'); const initResponse = await client.sendRequest('mcp.initialize', {}); const sessionId = initResponse.headers['mcp-session-id']; if (!sessionId) { throw new Error('No session ID received in response'); } console.log('\nSession established. Session ID:', sessionId); // 2. List available tools console.log('\n2. Listing available tools...'); const toolsResponse = await client.sendRequest('mcp.list_tools', {}, sessionId); console.log('Available tools:', JSON.stringify(toolsResponse.data, null, 2)); // 3. Try to call spiderfoot_ping console.log('\n3. Calling spiderfoot_ping...'); const pingResponse = await client.sendRequest('mcp.call_tool', { name: 'spiderfoot_ping', parameters: {} }, sessionId); console.log('Ping response:', JSON.stringify(pingResponse.data, null, 2)); } catch (error) { console.error('\n=== Test Failed ==='); console.error(error.message); process.exit(1); } } // Run the example if this file is executed directly if (import.meta.url === `file://${process.argv[1]}`) { main(); } export default MCPDebugClient;

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CorbettCajun/Spiderfoot-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server