Skip to main content
Glama
NellyW8

EDA Tools MCP Server

by NellyW8

view_waveform

Open VCD waveform files in GTKWave viewer to analyze simulation results from electronic design projects.

Instructions

Open VCD waveform file in GTKWave viewer

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID from simulation (required)
vcd_fileNoVCD filename (default: output.vcd)output.vcd

Implementation Reference

  • Core implementation of the view_waveform tool in the EDAServer class. Validates project and VCD file existence, checks for GTKWave availability, and launches GTKWave to view the waveform.
    async viewWaveform(projectId: string, vcdFile = "output.vcd"): Promise<string> {
      try {
        // Check if project exists
        const project = this.projects.get(projectId);
        if (!project) {
          return JSON.stringify({
            success: false,
            error: `Project ${projectId} not found. Run a simulation first.`,
          }, null, 2);
        }
    
        const vcdPath = join(project.dir, vcdFile);
    
        // Check if VCD file exists
        try {
          await fs.access(vcdPath);
        } catch {
          // List available files to help user
          const files = await fs.readdir(project.dir);
          const vcdFiles = files.filter(f => f.endsWith('.vcd'));
          
          return JSON.stringify({
            success: false,
            error: `VCD file '${vcdFile}' not found in project ${projectId}`,
            available_vcd_files: vcdFiles,
            note: "Make sure your testbench includes $dumpfile() and $dumpvars() commands"
          }, null, 2);
        }
    
        // Check if GTKWave is available
        if (!(await commandExists('gtkwave'))) {
          return JSON.stringify({
            success: false,
            error: "GTKWave not found. Please install GTKWave to view waveforms.",
            install_instructions: {
              macos: "brew install gtkwave",
              linux: "sudo apt-get install gtkwave",
              windows: "Install GTKWave from http://gtkwave.sourceforge.net/"
            }
          }, null, 2);
        }
    
        // Launch GTKWave in background
        const gtkwaveCmd = `gtkwave "${vcdPath}" &`;
        await execAsync(gtkwaveCmd, { 
          cwd: project.dir, 
          timeout: 5000 
        });
    
        return JSON.stringify({
          success: true,
          message: `GTKWave launched for project ${projectId}`,
          vcd_file: vcdFile,
          vcd_path: vcdPath,
          project_type: project.type
        }, null, 2);
    
      } catch (error: any) {
        return JSON.stringify({
          success: false,
          error: error.message || String(error),
        }, null, 2);
      }
    }
  • src/index.ts:767-785 (registration)
    Registers the view_waveform tool with the MCP server in the listTools response, defining its name, description, and input schema.
    {
      name: "view_waveform",
      description: "Open VCD waveform file in GTKWave viewer",
      inputSchema: {
        type: "object",
        properties: {
          project_id: { 
            type: "string", 
            description: "Project ID from simulation (required)" 
          },
          vcd_file: { 
            type: "string", 
            description: "VCD filename (default: output.vcd)",
            default: "output.vcd"
          },
        },
        required: ["project_id"],
      },
    },
  • MCP tool call dispatcher for view_waveform that validates input parameters and invokes the EDAServer.viewWaveform method.
    case "view_waveform": {
      const projectId = validateRequiredString(args, "project_id", name);
      const vcdFile = getStringProperty(args, "vcd_file", "output.vcd");
      
      return {
        content: [{
          type: "text",
          text: await edaServer.viewWaveform(projectId, vcdFile),
        }],
      };
    }

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/NellyW8/mcp-EDA'

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