Skip to main content
Glama

Fountain Pen Ink MCP Server

test-mcp-palette.js4.27 kB
#!/usr/bin/env node // Test the MCP server directly to verify the enhanced get_color_palette tool import { spawn } from 'child_process'; console.log('🔧 Testing Enhanced MCP Server get_color_palette Tool\n'); // Function to call MCP server tools async function callMCPTool(toolName, args) { return new Promise((resolve, reject) => { const server = spawn('node', ['dist/index.js'], { stdio: ['pipe', 'pipe', 'pipe'], }); let stdout = ''; let stderr = ''; server.stdout.on('data', (data) => { stdout += data.toString(); }); server.stderr.on('data', (data) => { stderr += data.toString(); }); // Send MCP request const request = { jsonrpc: '2.0', id: 1, method: 'tools/call', params: { name: toolName, arguments: args, }, }; server.stdin.write(JSON.stringify(request) + '\n'); server.stdin.end(); server.on('close', (code) => { if (stdout.includes('"content"')) { try { // Find the JSON response line const lines = stdout.split('\n'); const responseLine = lines.find((line) => { try { const parsed = JSON.parse(line); return parsed.result && parsed.result.content; } catch { return false; } }); if (responseLine) { const response = JSON.parse(responseLine); resolve(response); } else { reject(new Error('No valid response found')); } } catch (e) { reject(new Error(`Failed to parse response: ${e.message}`)); } } else { reject(new Error(`Tool call failed: ${stderr || 'No output'}`)); } }); setTimeout(() => { server.kill(); reject(new Error('Timeout')); }, 10000); }); } async function runMCPTests() { const tests = [ { name: 'Summer Theme', args: { theme: 'summer', palette_size: 3 }, }, { name: 'Winter Theme', args: { theme: 'winter', palette_size: 3 }, }, { name: 'Complementary Harmony', args: { theme: '#FF0000', palette_size: 3, harmony: 'complementary' }, }, { name: 'Triadic Harmony', args: { theme: '#0000FF', palette_size: 3, harmony: 'triadic' }, }, { name: 'Custom Palette', args: { theme: '#FF6B35,#F7931E,#FFD700', palette_size: 3 }, }, { name: 'Error Test - Invalid Theme', args: { theme: 'nonexistent', palette_size: 3 }, }, ]; for (const test of tests) { console.log(`🧪 ${test.name}`); console.log('='.repeat(test.name.length + 4)); try { const result = await callMCPTool('get_color_palette', test.args); if (result.result && result.result.content) { const palette = JSON.parse(result.result.content[0].text); console.log(`✅ Success: Generated ${palette.inks.length} inks`); console.log(`Theme: ${palette.theme}`); console.log(`Description: ${palette.description}`); console.log('Inks:'); palette.inks.forEach((ink, index) => { console.log(` ${index + 1}. ${ink.ink.fullname}`); console.log( ` RGB: [${ink.ink.rgb.join(', ')}] | Distance: ${ink.distance?.toFixed(1) || 'N/A'}`, ); }); } else { console.log('❌ Unexpected response format'); } } catch (error) { if (test.name.includes('Error Test')) { console.log(`✅ Expected error: ${error.message}`); } else { console.log(`❌ Error: ${error.message}`); } } console.log(''); } } runMCPTests() .then(() => { console.log('🎉 MCP Server testing complete!'); console.log('\nAll enhanced features are working correctly:'); console.log( '✅ New predefined themes (summer, winter, pastel, vibrant, monochrome, sunset, forest)', ); console.log( '✅ Harmony-based palette generation (complementary, analogous, triadic, split-complementary)', ); console.log('✅ Custom hex color palettes'); console.log('✅ Proper error handling and validation'); console.log('✅ Ink deduplication'); }) .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/ewilderj/inks-mcp'

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