Skip to main content
Glama

SRT Translation MCP Server

by omd0
test-both-files.jsโ€ข7.21 kB
#!/usr/bin/env node /** * Test SRT MCP server with both example.srt and Arabic_Rephrased_Full.srt */ import { SRTTranslationMCPServer } from './dist/mcp/server.js'; import fs from 'fs'; async function testWithFile(filename, description) { console.log(`\n${'='.repeat(60)}`); console.log(`๐Ÿงช TESTING: ${description}`); console.log(`๐Ÿ“„ File: ${filename}`); console.log(`${'='.repeat(60)}\n`); try { // Read SRT file const srtContent = fs.readFileSync(filename, 'utf8'); const subtitleBlocks = srtContent.split('\n\n').filter(block => block.trim()).length; console.log(`๐Ÿ“Š File loaded: ${subtitleBlocks} subtitle blocks\n`); // Create server instance const server = new SRTTranslationMCPServer(); // Test 1: SRT Parsing console.log('๐Ÿ” Test 1: SRT Parsing'); const parseResult = await server.handleParseSRT({ content: srtContent }); const parseData = JSON.parse(parseResult.content[0].text); console.log(`โœ… Parsing: ${parseData.success ? 'SUCCESS' : 'FAILED'}`); console.log(` Subtitles: ${parseData.subtitleCount}`); console.log(` Errors: ${parseData.errors?.length || 0}`); console.log(` Warnings: ${parseData.warnings?.length || 0}\n`); // Test 2: Conversation Detection console.log('๐Ÿ” Test 2: Conversation Detection'); const conversationsResult = await server.handleDetectConversations({ content: srtContent }); const responseText = conversationsResult.content[0].text; const jsonStart = responseText.indexOf('{'); const jsonEnd = responseText.lastIndexOf('}') + 1; const jsonText = responseText.substring(jsonStart, jsonEnd); const metadata = JSON.parse(jsonText); console.log(`โœ… Detection: SUCCESS`); console.log(` Chunks: ${metadata.chunkCount}`); console.log(` Duration: ${(metadata.totalDuration / 1000).toFixed(2)}s`); console.log(` Languages: ${JSON.stringify(metadata.languageDistribution)}`); console.log(` Speakers: ${JSON.stringify(metadata.speakerDistribution)}`); if (metadata.chunks.length > 0) { const firstChunk = metadata.chunks[0]; console.log(` First chunk: ${firstChunk.subtitleCount} subtitles, ${firstChunk.languageInfo.primary} (${firstChunk.languageInfo.confidence})`); console.log(` Content type: ${firstChunk.contentType}, Complexity: ${firstChunk.complexity}`); } console.log(''); // Test 3: Content Analysis console.log('๐Ÿ” Test 3: Content Analysis'); const analysisResult = await server.handleAnalyzeContentForAI({ content: srtContent }); const analysis = JSON.parse(analysisResult.content[0].text); console.log(`โœ… Analysis: SUCCESS`); console.log(` Total subtitles: ${analysis.totalSubtitles}`); console.log(` Questions: ${analysis.totalQuestions}`); console.log(` Exclamations: ${analysis.totalExclamations}`); console.log(` Narration: ${analysis.totalNarration}`); console.log(` Dialogue: ${analysis.totalDialogue}`); console.log(` Speaker changes: ${analysis.speakerChanges}`); console.log(` Avg length: ${analysis.averageSubtitleLength.toFixed(1)} chars`); console.log(` Avg gap: ${analysis.averageGap.toFixed(0)}ms\n`); // Test 4: AI Workflow Generation console.log('๐Ÿ” Test 4: AI Workflow Generation'); const workflowResult = await server.handleGenerateAIWorkflow({ content: srtContent, targetLanguage: 'es', sourceLanguage: 'en' }); const workflow = JSON.parse(workflowResult.content[0].text); console.log(`โœ… Workflow: SUCCESS`); console.log(` Content type: ${workflow.contentType}`); console.log(` Strategy: ${workflow.strategy}`); console.log(` Translation approach: ${workflow.translationApproach}`); console.log(` Timing strategy: ${workflow.timingStrategy}`); console.log(` Quality focus: ${workflow.qualityFocus}`); console.log(` Recommendations: ${workflow.recommendations.length}\n`); // Test 5: AI Context Optimization console.log('๐Ÿ” Test 5: AI Context Optimization'); const optimizedResult = await server.handleGetAIContextOptimizedChunks({ content: srtContent, maxContextSize: 50000, maxChunkSize: 8 }); const optResponseText = optimizedResult.content[0].text; const optJsonStart = optResponseText.indexOf('{'); const optJsonEnd = optResponseText.lastIndexOf('}') + 1; const optJsonText = optResponseText.substring(optJsonStart, optJsonEnd); const optimized = JSON.parse(optJsonText); console.log(`โœ… Optimization: SUCCESS`); console.log(` Total chunks: ${optimized.optimizationSummary.totalChunks}`); console.log(` Context size: ${optimized.optimizationSummary.totalContextSize.toLocaleString()} chars`); console.log(` Efficiency: ${optimized.optimizationSummary.contextEfficiency}`); console.log(` Under limit: ${optimized.optimizationSummary.chunksUnderLimit}`); console.log(` Over limit: ${optimized.optimizationSummary.chunksOverLimit}\n`); // Test 6: Translation Structured Data console.log('๐Ÿ” Test 6: Translation Structured Data'); const translateResult = await server.handleTranslateSRT({ content: srtContent, targetLanguage: 'es', sourceLanguage: 'en' }); const transResponseText = translateResult.content[0].text; const transJsonStart = transResponseText.indexOf('{'); const transJsonEnd = transResponseText.lastIndexOf('}') + 1; const transJsonText = transResponseText.substring(transJsonStart, transJsonEnd); const translationData = JSON.parse(transJsonText); console.log(`โœ… Translation Data: SUCCESS`); console.log(` Target: ${translationData.translationRequest.targetLanguage}`); console.log(` Source: ${translationData.translationRequest.sourceLanguage}`); console.log(` Subtitles: ${translationData.fileStructure.totalSubtitles}`); console.log(` Chunks: ${translationData.fileStructure.totalChunks}`); console.log(` Duration: ${(translationData.fileStructure.totalDuration / 1000).toFixed(2)}s`); console.log(` Has errors: ${translationData.fileStructure.hasErrors}`); console.log(` Validation: ${translationData.validationStatus.isValid ? 'PASSED' : 'FAILED'}\n`); console.log(`โœ… ALL TESTS PASSED for ${filename}\n`); } catch (error) { console.error(`โŒ Test failed for ${filename}:`, error.message); console.error('Stack trace:', error.stack); } } async function runComprehensiveTest() { console.log('๐Ÿš€ SRT MCP SERVER COMPREHENSIVE TEST'); console.log('Testing with multiple SRT files to demonstrate capabilities\n'); // Test with example.srt (English, mixed content) await testWithFile('/home/omd/Documents/Mix/SRT-MCP/example.srt', 'English Example File'); // Test with Arabic_Rephrased_Full.srt (Arabic content) await testWithFile('/home/omd/Documents/Mix/SRT-MCP/Arabic_Rephrased_Full.srt', 'Arabic Content File'); console.log('๐ŸŽ‰ COMPREHENSIVE TEST COMPLETED'); console.log('All SRT MCP server functionality verified successfully!'); } // Run the comprehensive test runComprehensiveTest().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/omd0/srt-mcp'

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