Skip to main content
Glama
ssql2014
by ssql2014

Verilator MCP Server

MCP Verilator License

An intelligent Model Context Protocol (MCP) server for Verilator that provides RTL simulation, automatic testbench generation, and natural language query capabilities. This tool bridges the gap between AI assistants and hardware verification, making RTL simulation more accessible and intelligent.

Features

🚀 Core Capabilities

  • Automatic Testbench Generation: Intelligently generates testbenches when none exist

  • Smart Simulation: Compile and run simulations with automatic dependency management

  • Natural Language Queries: Ask questions about your simulation in plain English

  • Waveform Analysis: Generate and analyze simulation waveforms

  • Coverage Collection: Track code coverage metrics

  • Protocol-Aware: Built-in support for standard protocols (AXI, APB, etc.)

🤖 Natural Language Examples

Simulation Control

  • "Run simulation on counter.v"

  • "Simulate my design with waveform capture"

  • "Execute the CPU testbench with coverage enabled"

  • "Compile and run my ALU module"

Testbench Generation

  • "Generate a testbench for my FIFO module"

  • "Create an AXI testbench for the memory controller"

  • "Make a testbench with random stimulus for my ALU"

  • "Generate a protocol-aware testbench for my APB slave"

Debugging & Analysis

  • "Why is data_valid low at 1000ns?"

  • "What caused the assertion failure at time 5000?"

  • "Show me when the reset signal changes"

  • "Why is my output signal X?"

  • "Debug the state machine transitions"

Coverage & Verification

  • "Show me the coverage report"

  • "Which code blocks are not tested?"

  • "How can I improve coverage for the controller?"

  • "Generate tests for uncovered scenarios"

Design Understanding

  • "Explain how the CPU module works"

  • "What are the inputs and outputs of the ALU?"

  • "Analyze timing performance"

  • "Show the module hierarchy"

  • "What's the maximum operating frequency?"

Related MCP server: Waveform MCP Server

Installation

Prerequisites

  • Node.js 16+

  • Verilator 5.0+ installed and in PATH

  • Git

Step 1: Install Verilator

Verilator must be installed before using this MCP server.

macOS (Homebrew)

brew install verilator

Ubuntu/Debian

sudo apt-get update
sudo apt-get install verilator

From Source

git clone https://github.com/verilator/verilator
cd verilator
autoconf
./configure
make -j `nproc`
sudo make install

Verify Installation

verilator --version
# Should output: Verilator 5.0 or higher

Step 2: Install Verilator MCP

# Clone the repository
git clone https://github.com/ssql2014/verilator-mcp.git
cd verilator-mcp

# Install dependencies
npm install

# Build the project
npm run build

# Test the server
npm test
# Or run diagnostic
./diagnose.sh

Step 3: Configure Claude Desktop

Add to your Claude Desktop configuration file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "verilator": {
      "command": "node",
      "args": ["/path/to/verilator-mcp/dist/index.js"],
      "env": {
        "LOG_LEVEL": "info"
      }
    }
  }
}

Step 4: Restart Claude Desktop

After updating the configuration, restart Claude Desktop to load the MCP server.

Environment Variables

  • LOG_LEVEL: Set logging level (debug, info, warn, error)

  • VERILATOR_PATH: Override Verilator installation path

Available Tools

1. verilator_compile

Compile Verilog/SystemVerilog designs to C++.

Parameters:

  • files (required): Array of design files

  • topModule: Top module name

  • optimization: Optimization level (0-3)

  • trace: Enable waveform generation

  • coverage: Enable coverage collection

Example:

{
  "files": ["cpu.v", "alu.v"],
  "topModule": "cpu",
  "optimization": 2,
  "trace": true
}

2. verilator_simulate

Run RTL simulation with automatic testbench generation.

Parameters:

  • design (required): Design file or directory

  • testbench: Testbench file (auto-generated if missing)

  • autoGenerateTestbench: Enable auto-generation (default: true)

  • enableWaveform: Generate waveforms (default: true)

  • simulationTime: Override simulation duration

Example:

{
  "design": "counter.v",
  "autoGenerateTestbench": true,
  "enableWaveform": true,
  "simulationTime": 10000
}

3. verilator_testbenchgenerator

Generate intelligent testbenches for modules.

Parameters:

  • targetFile (required): Verilog file containing module

  • targetModule (required): Module name

  • template: Template style (basic, uvm, cocotb, protocol)

  • protocol: Protocol type (axi, apb, wishbone, avalon)

  • stimulusType: Stimulus generation (directed, random, constrained_random)

Example:

{
  "targetFile": "fifo.v",
  "targetModule": "fifo",
  "template": "basic",
  "stimulusType": "constrained_random",
  "generateAssertions": true
}

4. verilator_naturallanguage

Process natural language queries about simulation.

Parameters:

  • query (required): Natural language question

  • context: Current simulation context

  • history: Previous query history

Example:

{
  "query": "Why did the assertion fail at time 5000?",
  "context": {
    "currentSimulation": {
      "design": "cpu.v",
      "waveformFile": "simulation.vcd"
    }
  }
}

Resources

The server provides access to simulation artifacts through MCP resources:

  • simulation://[project]/logs/[sim_id] - Simulation output logs

  • simulation://[project]/waves/[sim_id] - Waveform data

  • simulation://[project]/coverage/[sim_id] - Coverage reports

  • design://[project]/hierarchy - Module hierarchy

  • design://[project]/interfaces - Interface definitions

Testbench Generation Features

Automatic Detection

  • Clock and reset signal identification

  • Port direction and width analysis

  • Protocol recognition

  • Parameter extraction

Generated Components

  • Clock generation with configurable frequency

  • Reset sequences with proper polarity

  • Directed and random stimulus

  • Basic assertions and checkers

  • Coverage points

  • Waveform dumping

Protocol Support

Built-in templates for:

  • AXI (AXI4, AXI4-Lite, AXI-Stream)

  • APB (APB3, APB4)

  • Wishbone

  • Avalon

  • Custom protocols

Natural Language Query Categories

Debug Queries

  • Signal value analysis

  • Assertion failure investigation

  • X/Z propagation tracking

  • Timing relationship analysis

Analysis Queries

  • Performance metrics

  • Resource utilization

  • Critical path analysis

  • Power estimation

Coverage Queries

  • Coverage statistics

  • Uncovered code identification

  • Test scenario suggestions

Generation Queries

  • Testbench creation

  • Stimulus pattern generation

  • Assertion generation

  • Coverage point creation

Examples

Basic Simulation Flow

// 1. Compile design
{
  "tool": "verilator_compile",
  "arguments": {
    "files": ["alu.v"],
    "topModule": "alu",
    "trace": true
  }
}

// 2. Run simulation (auto-generates testbench)
{
  "tool": "verilator_simulate",
  "arguments": {
    "design": "alu.v",
    "autoGenerateTestbench": true,
    "enableWaveform": true
  }
}

// 3. Query results
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "Show me any errors in the simulation"
  }
}

Natural Language Workflow Examples

Example 1: Complete Design Verification

// Natural language: "Generate a testbench and run simulation for counter.v"
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "Generate a testbench and run simulation for counter.v with coverage"
  }
}

// Response will trigger testbench generation and simulation automatically

Example 2: Debug Simulation Failure

// After simulation fails, ask why
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "Why did my simulation fail?",
    "context": {
      "currentSimulation": {
        "design": "fifo.v",
        "testbench": "tb_fifo.sv",
        "waveformFile": "sim_output/simulation.vcd"
      }
    }
  }
}

// Follow up with specific signal investigation
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "Why is the full signal high when count is only 5?",
    "context": {
      "currentSimulation": {
        "design": "fifo.v",
        "waveformFile": "sim_output/simulation.vcd"
      }
    }
  }
}

Example 3: Coverage Improvement

// Ask for coverage analysis
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "What's my current code coverage and how can I improve it?"
  }
}

// Generate specific tests for uncovered code
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "Generate test cases for the error handling paths"
  }
}

Example 4: Design Understanding

// Ask about module functionality
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "Explain how the AXI arbiter module works and what are its key signals"
  }
}

// Analyze performance
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "What's the critical path in my design and how can I optimize it?"
  }
}

Protocol-Based Testing

// Generate AXI testbench
{
  "tool": "verilator_testbenchgenerator",
  "arguments": {
    "targetFile": "axi_slave.v",
    "targetModule": "axi_slave",
    "template": "protocol",
    "protocol": "axi",
    "generateAssertions": true
  }
}

// Or use natural language
{
  "tool": "verilator_naturallanguage",
  "arguments": {
    "query": "Create an AXI testbench with burst transactions for my memory controller"
  }
}

Multi-Step Conversation Example

// Step 1: Initial query
User: "I have a new UART module, help me verify it"
Assistant: "I'll help you verify your UART module. Let me first generate a testbench..."

// Step 2: Run simulation  
User: "Run the simulation with baud rate 115200"
Assistant: "Running simulation with 115200 baud rate..."

// Step 3: Debug issue
User: "The parity bit seems wrong"
Assistant: "Looking at the waveform, I can see the parity calculation is using even parity..."

// Step 4: Fix and verify
User: "Generate a test specifically for odd parity mode"
Assistant: "I'll create a directed test case for odd parity verification..."

Development

Building from Source

npm install
npm run build

Running Tests

npm test

Debug Mode

LOG_LEVEL=debug npm start

Troubleshooting

Quick Diagnostics

Run the diagnostic script to check your setup:

./diagnose.sh

Common Issues

  1. Verilator not found

    # Install Verilator first!
    brew install verilator  # macOS
    sudo apt-get install verilator  # Ubuntu/Debian
    
    # Verify installation
    verilator --version
  2. Server not starting in Claude Desktop

    • Ensure Verilator is installed (see above)

    • Check paths in Claude Desktop config are absolute

    • Restart Claude Desktop after configuration changes

    • Run ./diagnose.sh to check setup

  3. Compilation errors

    • Check file paths are correct

    • Verify SystemVerilog syntax

    • Review error messages in logs

  4. Testbench generation fails

    • Ensure module has standard port declarations

    • Check for unsupported constructs

    • Try simpler template options

For detailed troubleshooting, see TROUBLESHOOTING.md

Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Add tests for new features

  4. Submit a pull request

License

MIT License - see LICENSE file for details

Acknowledgments

  • Built on the Model Context Protocol by Anthropic

  • Powered by Verilator open-source simulator

  • Natural language processing using Natural library

Available Tools

4 tools
verilator_compileB

Compile Verilog/SystemVerilog design files to C++ using Verilator

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesVerilog/SystemVerilog files to compile
traceNoEnable waveform tracing
definesNoMacro definitions
threadsNoNumber of threads for compilation
coverageNoEnable coverage collection
includesNoInclude directories
languageNoHDL language standardsystemverilog
warningsNoWarning flags to enable
makeFlagsNoAdditional make flags
outputDirNoOutput directory for compiled filesobj_dir
topModuleNoTop module name
traceFormatNoWaveform formatvcd
optimizationNoOptimization level
verilatorFlagsNoAdditional Verilator flags
suppressWarningsNoWarning flags to suppress

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure, but it only states the basic compile action. It does not disclose side effects (e.g., overwriting output directory), resource usage, or authentication needs, which are important for such a tool.

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

Conciseness4/5

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

The description is a single, clear sentence. While it is appropriately concise, it could include more useful context without becoming overly verbose, so it is not a 5.

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

Completeness2/5

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

Given the complexity (15 parameters, no output schema), the description is insufficient. It does not explain return values, success/failure behavior, or prerequisites. The absence of an output schema increases the need for description completeness, which is lacking.

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

Parameters3/5

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

The input schema has 100% parameter description coverage, so the baseline is 3. The tool description adds no additional meaning to any parameter, but it does not need to since the schema describes all parameters adequately.

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

Purpose5/5

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

The description clearly states the action ('compile'), the resource ('Verilog/SystemVerilog design files'), the output ('to C++'), and the tool ('using Verilator'). This distinguishes it from sibling tools like 'verilator_simulate' and 'verilator_testbenchgenerator', which have different purposes.

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

Usage Guidelines2/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 its siblings (e.g., verilator_simulate for simulation, verilator_testbenchgenerator for testbenches). It lacks explicit context, exclusions, or alternatives.

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

verilator_naturallanguageC

Process natural language queries about RTL simulation, debugging, and analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language query about simulation
contextNo
historyNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only says 'process natural language queries' without indicating safety, side effects, authentication needs, or whether it modifies state or returns results. This is insufficient for an agent to understand the tool's behavior.

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 a single sentence, making it concise but lacking structure. It is front-loaded, but brevity sacrifices important details. It is under-specified for the tool's complexity, earning a middle score.

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 the tool has 3 parameters including nested objects, no annotations, and no output schema, the description is severely incomplete. It fails to explain return values, side effects, or how to use the parameters. This is a significant gap for a tool of this complexity.

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

Parameters1/5

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

Schema description coverage is only 33%, and the tool description does not mention any of the three parameters (query, context, history). It adds no meaning beyond the schema, failing to compensate for the low coverage. Parameters are entirely undocumented in the description.

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

Purpose4/5

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

The description clearly states it processes natural language queries about RTL simulation, debugging, and analysis. It distinguishes from sibling tools which are about compilation, simulation, and testbench generation. However, the verb 'process' is somewhat vague and could be more specific (e.g., answer, interpret).

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

Usage Guidelines2/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 its siblings (verilator_compile, verilator_simulate, verilator_testbenchgenerator) or any context for appropriate usage. No when-not-to-use or alternatives are mentioned.

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

verilator_simulateC

Run RTL simulation with automatic testbench generation if needed

ParametersJSON Schema
NameRequiredDescriptionDefault
designYesDesign file or compiled directory
definesNoMacro definitions
timeoutNoSimulation timeout in milliseconds
verboseNoVerbose output
plusargsNoPlusargs to pass to simulation
outputDirNoOutput directory for simulation artifactssim_output
testbenchNoTestbench file (will auto-generate if missing)
topModuleNoTop module name
waveformFileNoWaveform output file
coverageTypesNoCoverage types to collect
enableCoverageNoEnable coverage collection
enableWaveformNoGenerate waveform dump
simulationTimeNoOverride simulation time
waveformFormatNoWaveform formatvcd
enableAssertionsNoEnable assertion checking
useExistingBuildNoUse existing compiled output
optimizationLevelNoOptimization level
autoGenerateTestbenchNoAuto-generate testbench if missing

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits like file creation, side effects, error handling, and performance impacts. It only hints at conditional testbench generation but fails to explain the simulation process, resource usage, or that it modifies output directories. This is insufficient for an agent to anticipate the tool's full behavior.

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

Conciseness4/5

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

The description is extremely concise at one sentence, capturing the core action. It is front-loaded with the main purpose. However, given the tool's complexity (18 parameters), the description may be too brief to be fully informative; a slightly longer description could add useful context without becoming verbose.

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

Completeness2/5

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

The description lacks information about return values (no output schema), simulation results, error handling, and the overall workflow. For a complex tool with many parameters, the description is not sufficiently complete to guide an agent on expected outcomes or process steps.

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

Parameters3/5

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

The input schema has 100% parameter description coverage, so the baseline is 3. The tool description adds no additional meaning or context for the parameters beyond what the schema already provides. Thus it meets the baseline expectation.

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

Purpose4/5

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

The description clearly states the primary action (run RTL simulation) and highlights a key feature (automatic testbench generation). However, it does not explicitly differentiate from sibling tools like verilator_testbenchgenerator, which also generates testbenches. The purpose is largely clear but lacks distinct context.

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

Usage Guidelines2/5

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

No usage guidelines are provided. The description does not specify when to use this tool over verilator_compile, verilator_testbenchgenerator, or other alternatives. There are no prerequisites, conditions, or exclusions mentioned, leaving the agent without guidance on appropriate deployment.

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

verilator_testbenchgeneratorA

Generate intelligent testbenches for Verilog/SystemVerilog modules with automatic stimulus generation

ParametersJSON Schema
NameRequiredDescriptionDefault
protocolNoProtocol type for protocol-aware testbench
templateNoTestbench template stylebasic
parseOnlyNoOnly parse module, don't generate testbench
outputFileNoOutput testbench file path
targetFileYesVerilog file containing the module to test
clockPeriodNoClock period in time units
stimulusTypeNoType of stimulus to generatedirected
targetModuleYesModule name to generate testbench for
resetDurationNoReset duration in time units
simulationTimeNoTotal simulation time
generateCheckersNoGenerate response checkers
generateCoverageNoGenerate coverage points
generateAssertionsNoGenerate assertions

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It mentions 'intelligent' and 'automatic' stimulus generation but does not disclose behaviors like overwriting files, dependencies, or side effects. Some behavioral traits (e.g., generating checkers) are only implied via parameters.

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

Conciseness4/5

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

The description is a single concise sentence that front-loads the key action. It is appropriately sized but could include more structure (e.g., a brief list of capabilities). No redundant information.

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

Completeness2/5

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

Given the tool has 13 parameters, no output schema, and no annotations, the description is too high-level. It does not explain return values, file creation, error handling, or what constitutes a successful generation. The complexity demands more completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond parameter names and types. It does not explain relationships or constraints among parameters.

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

Purpose5/5

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

The description clearly states the tool generates testbenches for Verilog/SystemVerilog modules with automatic stimulus generation, and the verb 'generate' and resource 'testbenches' are specific. It effectively distinguishes from siblings like compile, simulate, and natural language.

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

Usage Guidelines3/5

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

While the description implies use when needing testbenches, it provides no explicit guidance on when to use this tool vs alternatives like verilator_compile or verilator_simulate. No when-not-to-use or exclusion criteria are given.

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

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: compilation, natural language processing, simulation, and testbench generation. There is no overlap in functionality, and the descriptions make it easy to differentiate between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with the prefix 'verilator_' followed by a descriptive action (e.g., compile, simulate). This uniformity makes the tool set predictable and easy to navigate.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose of RTL simulation and analysis. Each tool serves a specific and necessary function in the workflow, avoiding bloat or oversimplification.

Completeness4/5

The tools cover core RTL simulation tasks (compile, simulate, generate testbenches) and add a natural language interface for queries. Minor gaps might include more advanced debugging or analysis tools, but the set supports basic to intermediate workflows effectively.

Maintenance

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    A
    quality
    F
    maintenance
    A 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.
    6
    108
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables analysis of RTL waveform files (VCD, FST) through WAL (Waveform Analysis Language). Supports signal inspection, transition extraction, and advanced waveform queries for hardware design verification.
    14
    BSD 3-Clause

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/ssql2014/verilator-mcp'

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