EDA Tools MCP Server
Provides access to the research paper 'MCP4EDA: LLM-Powered Model Context Protocol RTL-to-GDSII Automation with Backend Aware Synthesis Optimization' that this MCP server implements, enabling reference to the underlying methodology and algorithms.
Provides Docker integration for running OpenLane ASIC design flow with automated tool dependencies, enabling complete RTL-to-GDSII automation in containerized environments.
Hosts the MCP server repository and demonstration assets, providing access to source code, documentation, and example implementations.
Integrates GTKWave for VCD file visualization and signal analysis, enabling waveform viewing and debugging of simulated designs.
Provides installation methods for EDA tools like Yosys, Icarus Verilog, GTKWave, and KLayout on macOS systems through Homebrew package management.
Supports installation and operation on Linux systems with specific instructions for Ubuntu/Debian distributions for EDA tool dependencies.
Provides installation and configuration instructions for macOS systems, including Homebrew-based tool installation and Claude Desktop setup.
Enables building and running the MCP server using Node.js, with npm for package management and TypeScript compilation for server implementation.
Manages dependencies and build processes for the MCP server through package.json configuration and npm scripts.
Supports Python-based tool installation (OpenLane via pip) and execution of ASIC design flows with Python scripts.
Provides download sources for GTKWave waveform viewer across multiple platforms (Windows, macOS, Linux).
Supports installation and operation on Ubuntu systems with specific package installation instructions for EDA tool dependencies.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EDA Tools MCP Serversynthesize this Verilog counter module for an ice40 FPGA"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
EDA Tools MCP Server
Implementation of the paper: MCP4EDA: LLM-Powered Model Context Protocol RTL-to-GDSII Automation with Backend Aware Synthesis Optimization
A comprehensive Model Context Protocol (MCP) server that provides Electronic Design Automation (EDA) tools integration for AI assistants like Claude Desktop and Cursor IDE. This server enables AI to perform Verilog synthesis, simulation, ASIC design flows, and waveform analysis through a unified interface.
Demo
https://github.com/user-attachments/assets/65d8027e-7366-49b5-8f11-0430c1d1d3d6
EDA MCP Server demonstration showing Verilog synthesis, simulation, and ASIC design flow
Related MCP server: Xcelium MCP Server
Features
Verilog Synthesis: Synthesize Verilog code using Yosys for various FPGA targets (generic, ice40, xilinx)
Verilog Simulation: Simulate designs using Icarus Verilog with automated testbench execution
Waveform Viewing: Launch GTKWave for VCD file visualization and signal analysis
ASIC Design Flow: Complete RTL-to-GDSII flow using OpenLane with Docker integration
Layout Viewing: Open GDSII files in KLayout for physical design inspection
Report Analysis: Read and analyze OpenLane reports for PPA metrics and design quality assessment
Prerequisites
Before using this MCP server, you need to install the following EDA tools:
1. Yosys (Verilog Synthesis)
macOS (Homebrew):
brew install yosysUbuntu/Debian:
sudo apt-get update
sudo apt-get install yosysFrom Source:
# Install prerequisites
sudo apt-get install build-essential clang bison flex \
libreadline-dev gawk tcl-dev libffi-dev git \
graphviz xdot pkg-config python3 libboost-system-dev \
libboost-python-dev libboost-filesystem-dev zlib1g-dev
# Clone and build
git clone https://github.com/YosysHQ/yosys.git
cd yosys
make -j$(nproc)
sudo make installAlternative - OSS CAD Suite (Recommended): Download the complete toolchain from: https://github.com/YosysHQ/oss-cad-suite-build/releases
2. Icarus Verilog (Simulation)
macOS (Homebrew):
brew install icarus-verilogUbuntu/Debian:
sudo apt-get install iverilogWindows: Download installer from: https://bleyer.org/icarus/
3. GTKWave (Waveform Viewer)
Direct Downloads (Recommended):
Windows: Download from SourceForge
macOS: Download from SourceForge or use Homebrew:
brew install --cask gtkwaveLinux: Download from SourceForge or use package manager:
sudo apt-get install gtkwave
Alternative Installation Methods:
# macOS (Homebrew)
brew install --cask gtkwave
# Ubuntu/Debian
sudo apt-get install gtkwave
# Build from source (all platforms)
git clone https://github.com/gtkwave/gtkwave.git
cd gtkwave
meson setup build && cd build && meson install4. Docker Desktop (Recommended for OpenLane)
Direct Downloads:
Windows: Download Docker Desktop for Windows
macOS: Download Docker Desktop for Mac or
brew install --cask docker
Installation:
Download and install Docker Desktop from the official website
Launch Docker Desktop and ensure it's running
Verify installation:
docker run hello-world
Note: Docker Desktop includes Docker Engine, Docker CLI, and Docker Compose in one package.
5. OpenLane (ASIC Design Flow)
Simple Installation Method (Recommended):
# Install OpenLane via pip
pip install openlane
# Pull the Docker image
docker pull efabless/openlane:latest
# Verify installation
docker run hello-worldUsage Example:
# Create project directory
mkdir -p ~/openlane-projects/my-design
cd ~/openlane-projects/my-design
# Create Verilog file (counter example)
cat > counter.v << 'EOF'
module counter (
input wire clk,
input wire rst,
output reg [7:0] count
);
always @(posedge clk or posedge rst) begin
if (rst)
count <= 8'b0;
else
count <= count + 1;
end
endmodule
EOF
# Create configuration file
cat > config.json << 'EOF'
{
"DESIGN_NAME": "counter",
"VERILOG_FILES": ["counter.v"],
"CLOCK_PORT": "clk",
"CLOCK_PERIOD": 10.0
}
EOF
# Run the RTL-to-GDSII flow
python3 -m openlane --dockerized config.jsonKey Benefits:
The
--dockerizedflag handles all tool dependencies automatically via Docker
6. KLayout (Layout Viewer)
Direct Downloads (Recommended):
Windows: Download KLayout for Windows
macOS: Download KLayout for macOS or
brew install --cask klayoutLinux: Download KLayout for Linux or
sudo apt install klayout
Alternative Installation:
# macOS (Homebrew)
brew install --cask klayout
# Ubuntu/Debian
sudo apt install klayoutInstallation
1. Clone and Build the MCP Server
git clone https://github.com/NellyW8/mcp-EDA
cd mcp-EDA
npm install
npm run build
npx tsc 2. Project Structure
mcp-EDA/
├── src/
│ └── index.ts # Main server code
├── build/
│ └── index.js # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.mdConfiguration
Docker Desktop MCP Integration
This method uses Docker Desktop's built-in MCP extension for the easiest setup experience.
Prerequisites
Docker Desktop 4.39.0+ installed and running
Claude Desktop installed
Setup Steps
Install Docker Desktop Extension:
Launch Docker Desktop
Go to "Extensions" from the left menu
Search for "AI Tools" or "Docker MCP Toolkit"
Install "Labs: AI Tools for Devs" extension
Configure Docker MCP Connection:
Open the installed "Labs: AI Tools for Devs" extension
Click the gear icon in the upper right corner
Select the "MCP Clients" tab
Click "Connect" for "Claude Desktop" or "Cursor IDE"
This automatically configures Claude Desktop and Cursor IDE with:
{ "mcpServers": { "MCP_DOCKER": { "command": "docker", "args": [ "run", "-i", "--rm", "alpine/socat", "STDIO", "TCP:host.docker.internal:8811" ] } } }
Cursor IDE Setup
Add Your EDA MCP Server:
Locate your Claude Desktop config file, Settings > Developer > Edit Config:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add your EDA server to the existing configuration:
{ "mcpServers": { "MCP_DOCKER": { "command": "docker", "args": [ "run", "-i", "--rm", "alpine/socat", "STDIO", "TCP:host.docker.internal:8811" ] }, "eda-mcp": { "command": "node", "args": [ "/absolute/path/to/your/eda-mcp-server/build/index.js" ], "env": { "PATH": "/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin", "HOME": "/your/home/directory" } } } }Restart Claude Desktop and verify both servers are running in Settings > Developer.
Cursor IDE Setup
Open Cursor Settings:
Press
Ctrl + Shift + P(Windows/Linux) orCmd + Shift + P(macOS)Search for "Cursor Settings"
Navigate to "MCP" in the sidebar
Add MCP Server: Click "Add new MCP server" and configure:
{ "mcpServers": { "MCP_DOCKER": { "command": "docker", "args": [ "run", "-i", "--rm", "alpine/socat", "STDIO", "TCP:host.docker.internal:8811" ] }, "eda-mcp": { "command": "node", "args": [ "/absolute/path/to/your/eda-mcp-server/build/index.js" ], "env": { "PATH": "/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin", "HOME": "/your/home/directory" } } } }Enable MCP Tools:
Go to Cursor Settings → MCP
Enable the "eda-mcp" server
You should see the server status change to "Connected"
Usage Examples
1. Verilog Synthesis
Ask Claude: "Can you synthesize this counter module for an ice40 FPGA?"
module counter(
input clk,
input rst,
output [7:0] count
);
reg [7:0] count_reg;
assign count = count_reg;
always @(posedge clk or posedge rst) begin
if (rst)
count_reg <= 8'b0;
else
count_reg <= count_reg + 1;
end
endmodule2. Verilog Simulation
Ask Claude: "Please simulate this adder with a testbench"
// Design
module adder(
input [3:0] a,
input [3:0] b,
output [4:0] sum
);
assign sum = a + b;
endmodule
// Testbench will be generated automatically or you can provide one3. ASIC Design Flow
Ask Claude: "Run the complete ASIC flow for this design with a 10ns clock period"
module simple_cpu(
input clk,
input rst,
input [7:0] data_in,
output [7:0] data_out
);
// Your RTL design here
endmoduleWhat you get after completion:
runs/RUN_*/final/gds/design.gds- Final GDSII layoutruns/RUN_*/openlane.log- Complete execution logruns/RUN_*/reports/- Timing, area, power analysis reportsAll intermediate results (DEF files, netlists, etc.)
4. Waveform Analysis
Ask Claude: "View the waveforms from the simulation with project ID: abc123"Troubleshooting
Common Issues
MCP Server Not Detected:
Verify the absolute path in configuration
Check that Node.js is installed and accessible
Restart Claude Desktop/Cursor after configuration changes
Docker Permission Errors:
sudo groupadd docker sudo usermod -aG docker $USER sudo rebootTool Not Found Errors:
Verify tools are installed:
yosys --version,iverilog -V,gtkwave --versionCheck PATH environment variable in MCP configuration
On macOS, ensure Homebrew paths are included:
/opt/homebrew/bin
OpenLane Timeout:
The server has a 10-minute timeout for OpenLane flows
For complex designs, consider simplifying or running multiple iterations
GTKWave/KLayout GUI Issues:
On macOS: GTKWave/KLayout may need manual approval in Security & Privacy settings
On Linux: Ensure X11 forwarding is working if using remote systems
On Windows: Ensure GUI applications can launch from command line
Debugging
Check MCP Server Logs:
Claude Desktop:
~/Library/Logs/Claude/mcp*.log(macOS)Cursor: Check the MCP settings panel for error messages
Test Tools Manually:
yosys -help iverilog -help docker run hello-world gtkwave --version klayout -vVerify Node.js Environment:
node --version npm --version
Support
For issues and questions:
Check the troubleshooting section above
Review MCP server logs
Test individual tools manually
Open an issue with detailed error messages and environment information
Note: This MCP server requires local installation of EDA tools. The server acts as a bridge between AI assistants and your local EDA toolchain, enabling sophisticated hardware design workflows through natural language interaction.
Cite
@misc{wang2025mcp4edallmpoweredmodelcontext,
title={MCP4EDA: LLM-Powered Model Context Protocol RTL-to-GDSII Automation with Backend Aware Synthesis Optimization},
author={Yiting Wang and Wanghao Ye and Yexiao He and Yiran Chen and Gang Qu and Ang Li},
year={2025},
eprint={2507.19570},
archivePrefix={arXiv},
primaryClass={cs.AR},
url={https://arxiv.org/abs/2507.19570},
}Available Tools
6 toolsread_openlane_reportsB
Read OpenLane report files for LLM analysis. Returns all reports or specific category for detailed analysis of PPA metrics, timing, routing quality, and other design results.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID from OpenLane run | |
| report_type | No | Specific report category to read (synthesis, placement, routing, final, etc.). Leave empty to read all reports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates this is a read operation (implied by 'Read') and specifies the return content (reports for PPA metrics, timing, etc.), but does not cover aspects like error handling, rate limits, authentication needs, or data format details. It adds some context but is incomplete for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences that efficiently convey the tool's purpose and return scope. It is front-loaded with the main action and avoids unnecessary details, though it could be slightly more structured by explicitly separating purpose from output details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 2 parameters with full schema coverage, the description is moderately complete. It covers the basic purpose and return content but lacks details on behavioral traits, error cases, and output structure, which are important for a read tool in a technical context like OpenLane analysis.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('project_id' and 'report_type') with clear descriptions. The description adds marginal value by mentioning 'all reports or specific category', which aligns with the schema's default behavior, but does not provide additional syntax, format, or usage details beyond what the schema specifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Read') and resource ('OpenLane report files'), specifying the purpose as retrieving reports for LLM analysis. It distinguishes from siblings like 'run_openlane' or 'simulate_verilog' by focusing on reading existing reports rather than executing processes, though it doesn't explicitly contrast with other read-like tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning 'Returns all reports or specific category', suggesting it can be used for broad or targeted analysis. However, it lacks explicit guidance on when to use this tool versus alternatives like 'view_gds' or 'view_waveform', and does not specify prerequisites or exclusions, leaving usage context somewhat vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_openlaneA
Run complete ASIC design flow using OpenLane (RTL to GDSII). This process can take up to 10 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| verilog_code | Yes | The Verilog RTL code for ASIC implementation | |
| design_name | Yes | Name of the design (will be used for module and files) | |
| clock_port | No | Name of the clock port | clk |
| clock_period | No | Clock period in nanoseconds | |
| open_in_klayout | No | Automatically open result in KLayout |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the time-consuming nature ('up to 10 minutes'), which is valuable behavioral context. However, it doesn't mention other important traits like whether it creates files/directories, requires specific permissions, handles errors, or provides progress feedback. The description adds some context but leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each earn their place: the first states the core purpose, the second provides critical behavioral context (time estimate). No wasted words, well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a complex ASIC design tool with 5 parameters, no annotations, and no output schema, the description is incomplete. While it covers purpose and time estimate, it doesn't address what the tool returns (GDSII file? success status?), error handling, or prerequisites. For a tool of this complexity with no structured support, more context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. According to scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Run') and resource ('complete ASIC design flow using OpenLane'), and distinguishes it from siblings by specifying the full RTL to GDSII process. This differentiates it from tools like synthesize_verilog (partial flow) or view_gds (viewing only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the time estimate ('up to 10 minutes'), suggesting this is for full ASIC implementation rather than partial steps. However, it doesn't explicitly state when to use this vs. alternatives like synthesize_verilog or when not to use it (e.g., for quick simulations). The context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_verilogC
Simulate Verilog code using Icarus Verilog
| Name | Required | Description | Default |
|---|---|---|---|
| verilog_code | Yes | The Verilog design code | |
| testbench_code | Yes | The testbench code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks behavioral details. It doesn't disclose what the simulation does (e.g., runs tests, generates waveforms), potential outputs, error handling, or performance considerations like runtime or resource usage. The mention of 'Icarus Verilog' hints at the simulator but doesn't explain its implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It front-loads the core purpose and includes the tool name, making it easy to parse quickly. Every word earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete for a simulation tool. It doesn't explain what the simulation returns (e.g., success/failure, waveforms, logs) or behavioral aspects, leaving gaps in understanding how to interpret results or handle errors. More context is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('verilog_code' and 'testbench_code') adequately. The description adds no additional parameter semantics beyond what's in the schema, such as format examples or interdependencies. Baseline 3 is appropriate as the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Simulate') and target ('Verilog code'), and specifies the tool used ('Icarus Verilog'). It distinguishes from siblings like 'synthesize_verilog' by focusing on simulation rather than synthesis. However, it doesn't explicitly contrast with 'view_waveform' which might display simulation results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing both design and testbench code), nor does it clarify relationships with siblings like 'view_waveform' for analyzing simulation outputs. The description assumes context without explicit usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
synthesize_verilogC
Synthesize Verilog code using Yosys for various FPGA targets
| Name | Required | Description | Default |
|---|---|---|---|
| verilog_code | Yes | The Verilog source code to synthesize | |
| top_module | Yes | Name of the top-level module | |
| target | No | Target technology (generic, ice40, xilinx, intel) | generic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the synthesis tool (Yosys) and target types, but doesn't disclose behavioral traits like whether it's read-only or destructive, expected runtime, output format, error handling, or resource requirements. For a synthesis tool with zero annotation coverage, this leaves significant gaps in understanding its operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes key details (tool and target scope) without unnecessary elaboration. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of synthesis (a non-trivial EDA operation), no annotations, and no output schema, the description is incomplete. It doesn't cover what the tool returns (e.g., netlist, reports), success/failure conditions, or integration with sibling tools. For a tool with 3 parameters and significant behavioral implications, more context is needed to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds no additional meaning beyond what's in the schema—it doesn't explain parameter interactions, default behaviors, or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting, but the description doesn't compensate or enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Synthesize') and resource ('Verilog code'), and specifies the tool used ('Yosys') and target scope ('various FPGA targets'). It distinguishes from siblings like simulate_verilog or run_openlane by focusing on synthesis rather than simulation or full flows. However, it doesn't explicitly differentiate from potential overlapping tools beyond the sibling list provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It doesn't mention prerequisites, when not to use it, or compare it to sibling tools like simulate_verilog (for verification) or run_openlane (for full implementation). Usage is implied by the purpose but lacks explicit contextual boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_gdsC
Open GDSII file in KLayout viewer
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID from OpenLane run | |
| gds_file | No | Specific GDS filename (optional, auto-detected if not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool opens a file in a viewer, implying a read-only operation, but doesn't disclose whether this requires specific software (KLayout), what happens if the file doesn't exist, whether it launches a GUI application, or any performance/rate limit considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for the tool's apparent complexity and gets straight to the point without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'opening in KLayout viewer' means operationally, what the user experience will be, whether this blocks execution, or what happens on success/failure. Given the technical nature of GDSII files and KLayout, more context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description doesn't add any meaningful parameter semantics beyond what's in the schema - it doesn't explain the relationship between project_id and gds_file, or provide context about auto-detection behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Open') and target resource ('GDSII file in KLayout viewer'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'view_waveform' which might also involve viewing operations in different contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, when this tool is appropriate, or what distinguishes it from sibling tools like 'view_waveform' or other viewing/analysis operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_waveformC
Open VCD waveform file in GTKWave viewer
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID from simulation (required) | |
| vcd_file | No | VCD filename (default: output.vcd) | output.vcd |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose whether this opens a GUI viewer (implying interactive use), requires specific permissions, has side effects, or handles errors. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste—it directly states the tool's action and target. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (opening a waveform viewer likely involves GUI interaction) and lack of annotations/output schema, the description is incomplete. It doesn't explain what happens after opening (e.g., viewer launch, return values), prerequisites, or error handling, leaving gaps for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters fully. The description adds no additional meaning beyond implying 'vcd_file' is opened, which is redundant with the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Open') and resource ('VCD waveform file in GTKWave viewer'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'view_gds' (which likely opens a different file type), so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It doesn't mention prerequisites (e.g., needing a simulation result), exclusions, or how it relates to siblings like 'simulate_verilog' (which might generate the VCD file). This leaves the agent with minimal context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v1.0.0- First observed
read_openlane_reports - First observed
run_openlane - First observed
simulate_verilog - First observed
synthesize_verilog - First observed
view_gds - First observed
view_waveform
TDQS
Each tool has a clearly distinct purpose with no overlap: reading reports, running a full design flow, simulating, synthesizing, viewing GDSII files, and viewing waveforms. The descriptions specify unique actions and tools (OpenLane, Icarus Verilog, Yosys, KLayout, GTKWave), making misselection unlikely.
All tools follow a consistent verb_noun pattern (e.g., read_openlane_reports, run_openlane, simulate_verilog) with no deviations. The naming is uniform and predictable across the set, using snake_case throughout.
With 6 tools, the count is well-scoped for an EDA server, covering key stages like simulation, synthesis, viewing, and analysis. Each tool earns its place by addressing a specific need in the ASIC/FPGA design workflow without being excessive or sparse.
The tool set covers major EDA operations: simulation, synthesis, viewing, and report analysis, with no dead ends. A minor gap exists in lacking explicit CRUD operations for design files (e.g., create/edit Verilog), but agents can work around this using the provided tools for core workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Related MCP Servers
- FlicenseAqualityFmaintenanceA comprehensive Model Context Protocol server that connects AI assistants to Electronic Design Automation tools, enabling Verilog synthesis, simulation, ASIC design flows, and waveform analysis through natural language interaction.6108-
- AlicenseBqualityBmaintenanceEnables AI assistants to control Cadence Xcelium and SimVision simulators in real time for automated RTL and gate-level debugging. It provides 25 tools for signal inspection, watchpoints, binary search, and simulation state management.251MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to analyze hardware simulation VCD waveforms and GTKWave save files, providing access to signal values, bus definitions, and groupings without loading entire files.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to drive Xilinx Vivado, Intel Quartus, and Anlogic TangDynasty for FPGA development, including project creation, synthesis, implementation, timing closure, and hardware programming through natural language.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/kfy123bot/mcp4eda-kfy'
If you have feedback or need assistance with the MCP directory API, please join our Discord server