Skip to main content
Glama

HiveAuth MCP Server

by AlyssonM
test-validation.js5.18 kB
#!/usr/bin/env node /** * Test script to verify enhanced validation system in MCP server */ import { spawn } from 'child_process'; import path from 'path'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); async function testValidation() { console.log('🧪 Testing Enhanced MCP Server Validation...\n'); const serverProcess = spawn('node', ['dist/index.js'], { cwd: __dirname, stdio: ['pipe', 'pipe', 'pipe'] }); let responseData = ''; serverProcess.stdout.on('data', (data) => { responseData += data.toString(); }); function sendMCPMessage(message) { return new Promise((resolve) => { const messageStr = JSON.stringify(message) + '\n'; serverProcess.stdin.write(messageStr); setTimeout(() => { try { const lines = responseData.trim().split('\n').filter(line => line.trim()); const responses = lines.map(line => { try { return JSON.parse(line); } catch (e) { return null; } }).filter(r => r !== null); resolve(responses); } catch (error) { resolve([]); } }, 1000); }); } try { // Initialize server console.log('📋 Test 1: Initialize MCP Server'); await sendMCPMessage({ jsonrpc: '2.0', id: 1, method: 'initialize', params: { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'test-client', version: '1.0.0' } } }); console.log('✅ Server initialized\n'); // Test with invalid tool name console.log('❌ Test 2: Invalid Tool Name'); responseData = ''; const invalidToolResponse = await sendMCPMessage({ jsonrpc: '2.0', id: 2, method: 'tools/call', params: { name: 'invalid_tool_name', arguments: {} } }); if (invalidToolResponse[0]?.result?.isError) { console.log('✅ Correctly rejected invalid tool name'); console.log(`📄 Error: ${invalidToolResponse[0].result.content[0].text.split('\\n')[0]}`); } else { console.log('❌ Failed to reject invalid tool name'); } console.log(); // Test with invalid input data console.log('📝 Test 3: Invalid Input Validation'); responseData = ''; const invalidInputResponse = await sendMCPMessage({ jsonrpc: '2.0', id: 3, method: 'tools/call', params: { name: 'issue_credential', arguments: { // Missing required fields credentialSubject: "invalid - should be object", // Missing type array vcVersion: "invalid_version" } } }); if (invalidInputResponse[0]?.result?.isError) { console.log('✅ Correctly validated input and provided detailed errors'); const errorText = invalidInputResponse[0].result.content[0].text; console.log('📄 Validation errors detected:'); console.log(errorText.split('\\n').slice(0, 5).join('\\n')); } else { console.log('❌ Failed to validate input properly'); } console.log(); // Test with valid input structure console.log('✅ Test 4: Valid Input Structure'); responseData = ''; const validInputResponse = await sendMCPMessage({ jsonrpc: '2.0', id: 4, method: 'tools/call', params: { name: 'create_presentation_definition', arguments: { id: 'test-def-123', name: 'Test Presentation Definition', purpose: 'Testing enhanced validation', inputDescriptors: [ { id: 'test-descriptor', name: 'Test Credential', constraints: { fields: [ { path: ['$.type'], filter: { type: 'array', contains: { const: 'TestCredential' } } } ] } } ] } } }); if (validInputResponse[0]?.result && !validInputResponse[0].result.isError) { console.log('✅ Successfully processed valid input'); console.log('📄 Tool executed successfully with enhanced validation'); } else { console.log('❌ Valid input was incorrectly rejected'); if (validInputResponse[0]?.result?.isError) { console.log('Error:', validInputResponse[0].result.content[0].text); } } console.log('\\n🎉 Enhanced validation testing completed!'); console.log('\\n📊 **Validation Features Tested:**'); console.log('- ✅ Tool name validation'); console.log('- ✅ Zod schema-based input validation'); console.log('- ✅ Detailed error messages with field-specific feedback'); console.log('- ✅ Type coercion and sanitization'); console.log('- ✅ Enhanced user experience with clear error reporting'); } catch (error) { console.error('❌ Test failed:', error); } finally { serverProcess.kill(); } } testValidation().catch(console.error);

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/AlyssonM/hiveauth-mcp'

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