Skip to main content
Glama
yshk-mrt

Presentation Buddy MCP Server

by yshk-mrt

TakeSourceScreenshot

Capture screenshots from OBS sources for presentations or documentation. Save images with customizable formats, dimensions, and compression settings.

Instructions

Takes a screenshot of the specified source.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paramsYes

Implementation Reference

  • Handler for the 'TakeSourceScreenshot' tool. Extracts source name and optional image parameters, constructs file path in screenshots directory, calls OBS 'SaveSourceScreenshot' via sendToObs, and returns a resource URI pointing to the saved screenshot file.
    case "TakeSourceScreenshot":
        // Try to get source from params or params.params
        const mcpInputParams = params.params || params;
        const sourceNameForScreenshot = mcpInputParams.source; // Assuming 'source' is the key from MCP
    
        if (!sourceNameForScreenshot) {
            console.error("TakeSourceScreenshot Error: Missing required parameter 'source'. Params received:", JSON.stringify(params, null, 2));
            throw new Error("Missing required parameter: source");
        }
        
        // Ensure sourceNameForScreenshot is a string before calling replace
        if (typeof sourceNameForScreenshot !== 'string') {
            console.error("TakeSourceScreenshot Error: 'source' parameter is not a string. Value:", sourceNameForScreenshot);
            throw new Error("'source' parameter must be a string.");
        }
    
        console.log(`Executing TakeSourceScreenshot for source: ${sourceNameForScreenshot}`);
    
        const format = mcpInputParams.imageFormat || "png";
        const timestamp = Date.now();
        const filename = `screenshot-${sourceNameForScreenshot.replace(/[^a-z0-9]/gi, '_')}-${timestamp}.${format}`;
        const absoluteFilePath = path.join(SCREENSHOTS_DIR_ABS, filename);
        
        // URI that will be returned to the client
        const resourceUri = `file://${absoluteFilePath}`;
    
        console.log(`Attempting to save screenshot to: ${absoluteFilePath}`);
    
        try {
            const obsRequestData: any = {
                sourceName: sourceNameForScreenshot, // OBS uses sourceName for SaveSourceScreenshot
                imageFormat: format,
                imageFilePath: absoluteFilePath, 
            };
            if (mcpInputParams.width !== undefined) obsRequestData.imageWidth = mcpInputParams.width;
            if (mcpInputParams.height !== undefined) obsRequestData.imageHeight = mcpInputParams.height;
            if (mcpInputParams.compressionQuality !== undefined) obsRequestData.imageCompressionQuality = mcpInputParams.compressionQuality;
    
            // Use SaveSourceScreenshot OBS request
            const obsResponse = await sendToObs("SaveSourceScreenshot", obsRequestData, context, "TakeSourceScreenshot");
            
            console.log(`SaveSourceScreenshot OBS response:`, obsResponse); 
            console.log(`Screenshot for source ${sourceNameForScreenshot} saved to ${absoluteFilePath}. Returning URI: ${resourceUri}`);
            
            // Return the URI to the client as a resource
            return {
                content: [{
                    type: "resource",
                    resource: {
                        uri: resourceUri,
                        text: `Screenshot for ${sourceNameForScreenshot} available at ${filename}`,
                        // mimeType: `image/${format}` // Optional: include mimeType if known
                    }
                }],
                filename: filename // Additional top-level info
            };
    
        } catch (e: any) {
            console.error(`Error in TakeSourceScreenshot for source ${sourceNameForScreenshot}:`, e.message);
            throw new Error(`Failed to take screenshot for ${sourceNameForScreenshot}: ${e.message}`);
        }
        break;

Latest Blog Posts

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/yshk-mrt/obs-mcp'

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