Silica
RTL and FPGA tools: lint, simulate, formal, synthesize, place and route, program a board.
Connector by simaanc · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/simaanc-silica-eda
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing, debugging
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
Runs code on install
Its package runs an install script (such as npm postinstall or setup.py code) as soon as you install it, before any tool is called. Read the script first.
- Tools
- 10 read · 5 write · 0 delete · 3 not yet classified
- Secrets
- None asked for
- Install scripts
- Runs code on install
- Runs as
- Python package
Tools by what they do 18
Read from the source code; the running server may list different tools.
Read 10 · Look things up without changing anything.
capture_serialformat_rtlget_constraintsget_project_structurelaunch_waveformlintread_coverageread_rtlread_waveformsearch_rtl
Write 5 · Create, change, send or run things.
run_cocotbrun_formalrun_place_routerun_simulationwrite_rtl
Not yet classified 3 · We could not tell from the name and description.
doctorprogram_devicesynthesize
Network hosts it talks to 31
amd.com· found in codecadence.com· found in codechipsalliance.github.io· found in codeclaude.ai· found in codecode.claude.com· found in codecode.visualstudio.com· found in codecursor.com· found in codedevelopers.openai.com· found in codedocs.amd.com· found in codedocs.astral.sh· found in codedocs.devin.ai· found in codeeda.sw.siemens.com· found in codegeminicli.com· found in codegetsilica.dev· found in codeghdl.github.io· found in codegithub.com· found in codegtkwave.sourceforge.net· found in codeintel.com· found in codeopencode.ai· found in coderustup.rs· found in codesh.rustup.rs· found in codesteveicarus.github.io· found in codesupport.cadence.com· found in codesupport.sw.siemens.com· found in codesurfer-project.org· found in codesynopsys.com· found in codetrabucayre.github.io· found in codeverilator.org· found in codewindsurf.com· found in codeyosyshq.net· found in code
Show 1 more hosts
zed.dev· found in code
Files it touches
/dev/serial/by-id/usb-...-if01-port0/dev/ttyUSB1/opt/oss-cad-suite/usr/local/oss-cad-suite- Your home directory (~)
~/.codex/config.toml~/.silica/config.toml- Any path the agent passes to its tools
Tools (18)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
capture_serialCapture a board's UART output, optionally sending text first. Use after program_device to check what the design prints, e.g. a firmware banner, or that typed characters are echoed. Only the port you name is opened; silica never scans for serial ports. Args: port: Serial device to open, e.g. "/dev/ttyUSB1" or "/dev/serial/by-id/usb-...-if01-port0" (Linux), "COM4" (Windows). On boards with an FTDI JTAG+UART bridge the UART is usually the second interface (if01). baud: Baud rate; 8N1, no flow control. duration: Seconds to listen (at most 600). send:…
doctorReport silica's version and which EDA tools it can use, with a fix for each gap. Call this first in a new environment, or when a tool call says a tool is missing, to see what is installed before choosing a flow. It finds tools the same way the other tools do (PATH, then an OSS CAD Suite install) and asks each open-source tool for its version. Commercial tools (VCS, Questa, Xcelium, Vivado, ...) are only looked up, never run, so no license is checked out. Takes a few seconds. Args: check_updates: Also ask PyPI (3 s timeout) whether a newer silica-eda exists. Offline or blocked net…
format_rtlAuto-format a SystemVerilog/Verilog file and return a unified diff. Call with dry_run=True first to review the diff, then dry_run=False to write the formatted source back. The file must stay inside the project directory (same confinement as write_rtl). Args: file: Path to the source file to format. dry_run: If True (default), return the diff without writing. If False, overwrite the file with the formatted output. tool: "auto" | "verible". Auto uses config priority order. timeout: Seconds before killing the formatter. Returns: {dry_run, written, diff, lines_c…
get_constraintsRead and return the content of a constraint file (.xdc / .sdc / .lpf / .upf). Args: file: Path to the constraint file; must stay inside the project directory. Returns: content: raw file text, path, format (inferred from extension)
get_project_structureList the project's RTL and constraint files. Start here in an unfamiliar project to find the sources to pass to lint, run_simulation and synthesize, and the constraint file for run_place_route. Args: root: Directory to scan, inside the project (defaults to the project root). Returns: root: the directory scanned (absolute) rtl_files: relative paths of .v/.sv/.svh/.vh/.vhd/.vhdl files constraint_files: relative paths of .xdc, .lpf, .sdc, .upf and .pdc files (iCE40 .pcf files are not listed) file_count: number of RTL files error: present only when root…
launch_waveformOpen a VCD/FST/FSDB trace file in a waveform viewer (fire-and-forget). Typical flow: 1. result = run_simulation(..., trace=True) 2. launch_waveform(result["trace_vcd"]) Args: trace_file: Absolute path to the .vcd, .fst, or .fsdb trace file. viewer: "auto" | "surfer" | "gtkwave" | "verdi". Auto picks from config priority order. Returns: {"viewer": str, "launched": bool, "trace": str} or {"launched": False, "error": str} on failure.
lintLint a SystemVerilog/Verilog file and return structured warnings. Args: file: Path to the source file to lint. May instead be a ``.f`` filelist (one path per line); each listed file is linted. ruleset: "default" | "all" | comma-separated rule list (tool-specific). tool: "auto" | "verible" | "verilator" | "svlint" | "spyglass". Auto uses config priority order. timeout: Seconds before killing the linter (applied per file). extra_files: Additional files to lint. Each may itself be a ``.f`` filelist, expanded in place. Warnings across all files ar…
program_deviceProgram a bitstream to an FPGA device with openFPGALoader. Loads volatile SRAM by default, which is safe to repeat. For Xilinx devices success means the FPGA asserted DONE; a rejected bitstream is reported as a failure even though openFPGALoader exits 0. The design starts running as soon as loading finishes, so boot output is usually missed by a serial capture started afterwards (see capture_serial). Args: bitstream: Path to a loadable bitstream from run_place_route: .bit (Xilinx, ECP5) or .bin (iCE40). nextpnr's .asc/.textcfg text configs can't be loaded di…
read_coverageSummarize a Verilator coverage.dat as structured line coverage. Typical flow: 1. result = run_simulation(..., simulator="verilator", coverage=True) 2. read_coverage(result["coverage_dat"]) # find the weak spots Args: coverage_dat: Path to the coverage.dat produced by a coverage run (the run_simulation result's coverage_dat field). max_uncovered: Cap on uncovered line numbers reported per file; "uncovered_truncated" is set when the cap is hit. timeout: Seconds before killing verilator_coverage. Returns: {coverage, total {lines_to…
read_rtlRead an RTL file, optionally restricted to a line range. Args: file: Path to the file; must stay inside the project directory. start_line: First line to return (1-indexed, inclusive). end_line: Last line to return (1-indexed, inclusive). Returns: content: file text with line numbers, path, total_lines
read_waveformRead signal values from a VCD or FST trace — no viewer needed. Typical debug flow: 1. result = run_simulation(..., trace=True) # note failure time T 2. read_waveform(result["trace_vcd"]) # discover signal names 3. read_waveform(result["trace_vcd"], signals=["dut.state", "dut.count"], time_start=T-100, time_end=T+10) Args: trace_file: Path to the trace. VCD is read directly; .fst is converted via the OSS CAD Suite's fst2vcd first. signals: Signal names to read. A name matches on the full hier…
run_cocotbRun a cocotb (Python) testbench against an HDL design. cocotb writes testbenches as Python coroutines instead of an HDL testbench; this builds the design and runs the cocotb tests via cocotb's runner, returning per-test pass/fail. Args: sources: HDL design files. May include ``.f`` filelists (one path per line), expanded in place. test_module: Path to the Python cocotb test file (contains the @cocotb.test() coroutines). toplevel: Top-level HDL module cocotb instantiates. simulator: "icarus" | "verilator" | "ghdl" | "questa" | "xcelium" |…
run_formalRun formal verification or equivalence checking and return structured results. Two usage modes for property verification (sby/jaspergold/vc_formal): 1. Pass sby_file — run an existing .sby or .tcl config file directly. 2. Pass files + top — auto-generate a config and run it. For equivalence checking (tool="eqy"): 1. Pass sby_file pointing to an .eqy config file. 2. Pass gold_files + gate_files + top — auto-generate an .eqy config. Args: sby_file: Path to an existing config file (.sby, .eqy, or .tcl). files: RTL source files for property verification (when sby_file is omitted…
run_place_routePlace and route an FPGA netlist and return timing and utilization. Takes a Yosys JSON netlist (from synthesize with target "ice40"/"ecp5"/ "xilinx"/etc.). The output is a bitstream ready for program_device when the packing tool is available: a .bit for xilinx (openXC7's fpga-as), a .bin for ice40 (icepack) and a .bit for ecp5 (ecppack). Without it, the output is nextpnr's FASM or text config (.asc / .textcfg) and a warning says what is missing. Args: netlist: Path to Yosys JSON netlist (produced by the synthesize tool). arch: FPGA architecture — "ice40" | "ecp5" | "nexus" | "machxo2"…
run_simulationRun RTL simulation and return structured diagnostics. The simulator runs in the DUT file's directory, so relative paths in the testbench (e.g. $readmemh("../fw/firmware.hex")) resolve from there, with or without trace/coverage. A failing $fatal/$error comes back in errors with its file, line and message. Args: file: Path to the DUT source file (.sv / .v for Verilog, .vhd for VHDL). May instead be a ``.f`` filelist (one source path per line); its entries become the design sources. testbench: Path to the testbench file. simulator: "auto" | "verilator" | "icarus"…
Show 3 more tools
search_rtlGrep across project RTL files with surrounding context. Args: query: Search string (literal, not regex). root: Directory to search, inside the project (defaults to the project root). scope: "all" | "sv" | "v" — filter by file extension. Returns: matches: [{file, line, context}] — capped at 50 entries match_count: total matches found (may exceed len(matches)) truncated: True when matches were dropped by the 50-entry cap
synthesizeSynthesize RTL and return structured utilization and timing summary. Args: top_module: Name of the top-level module to synthesize. files: List of source file paths (.sv / .v). target: Synthesis target. Yosys: "generic" | "ice40" | "ecp5" | "xilinx" | "gowin" Vivado: FPGA part string e.g. "xc7a35tcsg324-1", or shorthand "artix7" | "kintex7" | "ultrascale" | "ultrascale+" | "zynq" Quartus: device family e.g. "cyclone5" | "arria10" | "stratix10" DC Shell: technology library path, or "generic" tool: "auto" | "…
write_rtlWrite (or diff) proposed RTL content to a file. Always call with dry_run=True first to review the unified diff before committing. Args: file: Path to the target file; must stay inside the project directory. content: Complete new file content. dry_run: If True (default), return a unified diff without writing. If False, write. Returns: diff: unified diff string (dry_run=True) or empty string after write lines_changed: number of changed lines written: True if file was actually written
Compare and alternatives
Featured in
Signals
- Stars
- 12
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 536
- Last commit
- Oct 22, 2026 (6 days ago)
- Last release
- Oct 20, 2026 (8 days ago)
- Last package publish
- Oct 20, 2026 (8 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.simaanc/silica-eda- Version
- 0.5.0
- Auth
- No auth
- Packages
- pypi silica-eda
- License
- AGPL-3.0
- Repository
- github.com/simaanc/silica-eda
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Silica MCP server. Agent Mart. https://agentmart.dev/connectors/simaanc-silica-eda (last updated 2026-10-24)