Skip to main content
Glama
RamboRogers

FAL Image/Video MCP Server

by RamboRogers

veo3

Generate videos from text prompts using Google DeepMind's Veo 3 model with configurable duration and aspect ratios for creative content production.

Instructions

Veo 3 - Google DeepMind's latest with speech and audio

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
promptYesText prompt for video generation
durationNo
aspect_ratioNo16:9

Implementation Reference

  • src/index.ts:110-118 (registration)
    MODEL_REGISTRY.textToVideo array registers the 'veo3' tool with its endpoint and metadata. This registry is used for tool listing and dispatching.
    textToVideo: [
      { id: 'veo3', endpoint: 'fal-ai/veo3', name: 'Veo 3', description: 'Google DeepMind\'s latest with speech and audio' },
      { id: 'kling_master_text', endpoint: 'fal-ai/kling-video/v2.1/master/text-to-video', name: 'Kling 2.1 Master', description: 'Premium text-to-video with motion fluidity' },
      { id: 'pixverse_text', endpoint: 'fal-ai/pixverse/v4.5/text-to-video', name: 'Pixverse V4.5', description: 'Advanced text-to-video generation' },
      { id: 'magi', endpoint: 'fal-ai/magi', name: 'Magi', description: 'Creative video generation' },
      { id: 'luma_ray2', endpoint: 'fal-ai/luma-dream-machine/ray-2', name: 'Luma Ray 2', description: 'Latest Luma Dream Machine' },
      { id: 'wan_pro_text', endpoint: 'fal-ai/wan-pro/text-to-video', name: 'Wan Pro', description: 'Professional video effects' },
      { id: 'vidu_text', endpoint: 'fal-ai/vidu/q1/text-to-video', name: 'Vidu Q1', description: 'High-quality text-to-video' }
    ],
  • Dynamic schema generation for textToVideo tools like 'veo3', defining input parameters: prompt (required), duration, aspect_ratio.
    } else if (category === 'textToVideo') {
      baseSchema.inputSchema.properties = {
        prompt: { type: 'string', description: 'Text prompt for video generation' },
        duration: { type: 'number', default: 5, minimum: 1, maximum: 30 },
        aspect_ratio: { type: 'string', enum: ['16:9', '9:16', '1:1', '4:3', '3:4'], default: '16:9' },
      };
      baseSchema.inputSchema.required = ['prompt'];
    } else if (category === 'imageToVideo') {
  • Core handler function for all textToVideo tools including 'veo3'. Calls fal.subscribe on the model endpoint, processes video output with downloads and data URLs.
    private async handleTextToVideo(args: any, model: any) {
      const { prompt, duration = 5, aspect_ratio = '16:9' } = args;
    
      try {
        // Configure FAL client lazily with query config override
        configureFalClient(this.currentQueryConfig);
        const inputParams: any = { prompt };
        
        if (duration) inputParams.duration = duration;
        if (aspect_ratio) inputParams.aspect_ratio = aspect_ratio;
    
        const result = await fal.subscribe(model.endpoint, { input: inputParams });
        const videoData = result.data as FalVideoResult;
        const videoProcessed = await downloadAndProcessVideo(videoData.video.url, model.id);
    
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify({
                model: model.name,
                id: model.id,
                endpoint: model.endpoint,
                prompt,
                video: {
                  url: videoData.video.url,
                  localPath: videoProcessed.localPath,
                  ...(videoProcessed.dataUrl && { dataUrl: videoProcessed.dataUrl }),
                  width: videoData.video.width,
                  height: videoData.video.height,
                },
                metadata: inputParams,
                download_path: DOWNLOAD_PATH,
                data_url_settings: {
                  enabled: ENABLE_DATA_URLS,
                  max_size_mb: Math.round(MAX_DATA_URL_SIZE / 1024 / 1024),
                },
                autoopen_settings: {
                  enabled: AUTOOPEN,
                  note: AUTOOPEN ? "Files automatically opened with default application" : "Auto-open disabled"
                },
              }, null, 2),
            },
          ],
        };
      } catch (error) {
        throw new Error(`${model.name} generation failed: ${error}`);
      }
    }
  • Dispatch logic in CallToolRequestSchema handler routes 'veo3' calls to handleTextToVideo based on MODEL_REGISTRY lookup.
    const model = getModelById(name);
    if (!model) {
      throw new McpError(
        ErrorCode.MethodNotFound,
        `Unknown model: ${name}`
      );
    }
    
    // Determine category and handle accordingly
    if (MODEL_REGISTRY.imageGeneration.find(m => m.id === name)) {
      return await this.handleImageGeneration(args, model);
    } else if (MODEL_REGISTRY.textToVideo.find(m => m.id === name)) {
      return await this.handleTextToVideo(args, model);
    } else if (MODEL_REGISTRY.imageToVideo.find(m => m.id === name)) {
      return await this.handleImageToVideo(args, model);
    }
  • src/index.ts:402-405 (registration)
    Tool registration in ListToolsRequestSchema dynamically adds 'veo3' to the tools list using generateToolSchema.
    }
    for (const model of MODEL_REGISTRY.textToVideo) {
      tools.push(this.generateToolSchema(model, 'textToVideo'));
    }
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. The description mentions 'speech and audio' which might imply audio generation capabilities, but doesn't clarify whether this tool generates video, audio, or both, what the output format is, whether it's a paid service, rate limits, or any operational constraints. The vague marketing language fails to provide actionable behavioral information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief (7 words) which could be efficient, but it's under-specified rather than concise. Every word should earn its place - 'Google DeepMind's latest' is marketing fluff that doesn't help tool selection, and 'with speech and audio' is vague without context. While short, it fails to convey essential information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 3-parameter tool with no annotations, no output schema, and low schema coverage (33%), the description is completely inadequate. It doesn't explain what the tool produces, how to use it effectively, what makes it different from 21 sibling tools, or provide any operational context. For a video/audio generation tool with multiple parameters, this minimal description leaves the agent guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (1 of 3 parameters has a description), so the description needs to compensate but doesn't. The description mentions 'speech and audio' which might relate to the prompt parameter, but doesn't explain what kind of prompts work best, how speech/audio features are used, or provide context for duration and aspect_ratio parameters. It adds minimal value beyond the sparse schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Veo 3 - Google DeepMind's latest with speech and audio' restates the tool name and adds vague marketing language but doesn't specify what the tool actually does. It mentions 'speech and audio' which might imply audio/video generation, but there's no clear verb+resource statement like 'generate video from text prompt' that distinguishes it from sibling tools like ltx_video or other media generation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With 22 sibling tools including multiple video, image, and text generation models (e.g., ltx_video, flux_dev, stable_diffusion_35), there's no indication of what makes Veo 3 unique or when it should be preferred over other options. No context about use cases, strengths, or limitations is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/RamboRogers/fal-image-video-mcp'

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