Skip to main content
Glama
lcapossio

fpgaZeroMCP

by lcapossio

fpgaZeroMCP

CI License: MIT Python MCP

Un servidor de código abierto Model Context Protocol que brinda a los asistentes de IA una cadena de herramientas FPGA completa: lint, simulación, síntesis, place-and-route, programación del bitstream y un registro de núcleos IP en vivo respaldado por GitHub.

Pídele a tu IA que busque núcleos, los importe, aplique lint al HDL, sintetice un proyecto VHDL o Verilog de varios archivos desde el disco, ejecute una simulación y luego cargue el bitstream en tu placa, todo sin salir de tu ventana de chat.

Características

  • Multilenguaje: Verilog, SystemVerilog y VHDL (mediante ghdl-yosys-plugin)

  • Tres modos de entrada: cadena code en línea, diccionario files de varios archivos o ruta project_dir en disco

  • Soporte de listas de archivos: files.f/sources.f con directivas +incdir+, +define+ y -f anidadas

  • Ajustes predefinidos de placa: 11 placas integradas (iCEBreaker, ULX3S, TinyFPGA BX, Tang Nano, etc.) — establece target/device/package/clock automáticamente

  • Detección automática de restricciones: encuentra .pcf/.lpf/.pdc/.cst en tu directorio de proyecto

  • Programación de bitstream: graba mediante iceprog (iCE40) u openFPGALoader (ECP5/Gowin/Nexus/Xilinx)

  • Vivado: ejecuciones por lotes mediante start_build, compilaciones de Xilinx a través de LiteX, análisis estructurado de registros de Vivado en build_status

  • Análisis de veredictos de simulación: detección de patrones PASS/FAIL/UVM con resumen de señales VCD

  • Compilaciones en segundo plano: síntesis/PnR de larga duración con sondeo de estado y una estricta lista blanca de comandos solo EDA

  • Solicitudes concurrentes: ping, estado de compilación y cancelación se responden mientras una llamada de herramienta lenta sigue en ejecución; notifications/cancelled aborta una llamada en curso

  • Resultados legibles por máquina: structuredContent en los resultados de las herramientas (MCP 2025-06-18) y una taxonomía uniforme de error_code para decisiones de reintento/fallback

  • Notificaciones de progreso: notifications/progress en los límites de fase de ejecuciones de síntesis, place-and-route y LiteX cuando el cliente envía un progressToken

  • Registro de núcleos IP: búsqueda en vivo e importación desde GitHub con metadatos FuseSoC CAPI2

  • Comprobación de estado: descubre qué herramientas de OSS CAD Suite están instaladas y son accesibles


Related MCP server: vivado-mcp-agent

Tabla de contenido


Cómo funciona

Your AI assistant  <-->  fpgaZeroMCP (stdio MCP server)  <-->  OSS tools
                                    |
                           cores/   registry on GitHub
                           (uart_tx, fifo + any imported)

El servidor MCP se ejecuta como un subproceso local. Tu IA invoca herramientas a través de JSON-RPC (stdio). El servidor recurre a Yosys, nextpnr, iverilog, Verilator y otras herramientas de OSS CAD Suite — y puede descargar núcleos FPGA de código abierto directamente desde GitHub.


Requisitos previos

Requisito

Notas

Python 3.11+

OSS CAD Suite

Incluye iverilog, Yosys, nextpnr, Verilator, Verible y GHDL en una sola descarga

LiteX + litex-boards

Opcional: solo necesario para las herramientas LiteX

Añade OSS CAD Suite a tu PATH después de la instalación. Todos los envoltorios de herramientas se degradan correctamente si falta una herramienta.

Acceso a la API de GitHub

Las solicitudes a la API de GitHub no están autenticadas de forma predeterminada y están sujetas a límites de tasa. Configura un token de acceso personal para aumentar los límites:

# Linux/macOS
export GITHUB_TOKEN=ghp_...
# Windows (PowerShell)
$env:GITHUB_TOKEN = "ghp_..."

Instalación

git clone https://github.com/lcapossio/fpgaZeroMCP
cd fpgaZeroMCP
pip install -e .

Configuración del cliente MCP

Claude Desktop

Añade a claude_desktop_config.json:

{
  "mcpServers": {
    "fpgaZeroMCP": {
      "command": "python",
      "args": ["/path/to/fpgaZeroMCP/server.py"],
      "env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
    }
  }
}

VS Code (GitHub Copilot)

Añade a .vscode/mcp.json en tu espacio de trabajo:

{
  "servers": {
    "fpgaZeroMCP": {
      "type": "stdio",
      "command": "python",
      "args": ["/path/to/fpgaZeroMCP/server.py"],
      "env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
    }
  }
}

Cursor / Windsurf

Añade a tu configuración de MCP (Configuración → Servidores MCP):

{
  "fpgaZeroMCP": {
    "command": "python",
    "args": ["/path/to/fpgaZeroMCP/server.py"],
    "env": { "PYTHONPATH": "/path/to/fpgaZeroMCP" }
  }
}

Ejemplos de prompts

  • "Encuentra un núcleo maestro I2C e impórtalo."

  • "Sintetiza los archivos VHDL en ~/projects/my_fpga y dime el recuento de LUT."

  • "Haz PnR de mi proyecto para la placa iCEBreaker y luego grábalo."

  • "Ejecuta place-and-route con la semilla 42 para intentar mejorar el timing."

  • "Aplica lint a este Verilog y corrige los errores."

  • "Simula este FIFO y dime si el testbench pasó."

  • "Formatea este archivo SystemVerilog."

  • "¿Qué herramientas de OSS CAD Suite tengo instaladas?"


Herramientas

Calidad de HDL

Herramienta

Descripción

lint_hdl

Comprobación de sintaxis/errores mediante iverilog (V/SV) o GHDL (VHDL) — archivo único

lint_project

Aplica lint a varios archivos juntos para que se resuelvan las referencias entre módulos

get_diagnostics

Diagnósticos estructurados por línea — respaldo de Verilator → verible (V/SV), GHDL (VHDL)

format_hdl

Autoformato mediante verible-verilog-format (V/SV) o vsg (VHDL)

Flujo de diseño

Herramienta

Descripción

simulate

Compila y ejecuta testbenches — iverilog (V/SV) o GHDL (VHDL). Acepta code, files o project_dir. Devuelve veredicto + resumen VCD

synthesize

Síntesis con Yosys y estadísticas de recursos. Acepta code, files o project_dir. Verilog, SV, VHDL

place_and_route

Yosys + nextpnr en un solo paso. Ajustes predefinidos de placa, detección automática de restricciones, bitstream escrito en disco (bitstream_path)

program_fpga

Graba un bitstream mediante iceprog u openFPGALoader

list_boards

Enumera los ajustes predefinidos de placa integrados (target/device/package/clock)

Registro de núcleos IP

Herramienta

Descripción

list_ip_cores

Explora el registro local, filtra por categoría

get_ip_core

Obtiene el manifiesto y el código fuente HDL de un núcleo

generate_ip

Obtén un fragmento de instanciación parametrizado + archivos fuente

search_github_cores

Busca en GitHub repositorios de IP FPGA con licencia MIT

import_github_core

Descarga un repositorio de GitHub al registro local

import_fusesoc_core

Importa un archivo .core local de FuseSoC CAPI2

LiteX

Herramienta

Descripción

litex_build

Ejecuta un objetivo de placa LiteX con --build

litex_soc

Genera un SoC LiteX sin compilar gateware

litex_flow

Ejecuta un objetivo de placa LiteX con argumentos totalmente personalizados

Gestión de compilaciones

Herramienta

Descripción

start_build

Inicia un comando de larga duración en segundo plano (solo herramientas EDA de la lista blanca)

build_status

Comprueba el progreso — estado, tiempo transcurrido, fase/utilización/timing analizados

list_builds

Lista todas las compilaciones rastreadas (en ejecución y finalizadas)

cancel_build

Termina una compilación en segundo plano en ejecución

cleanup_build_logs

Elimina registros de compilación antiguos por antigüedad y tamaño total

Servidor / registro

Herramienta

Descripción

check_tools

Informa qué herramientas de OSS CAD Suite están instaladas, con rutas y versiones

reload_registry

Vuelve a escanear los directorios de núcleos sin reiniciar el servidor


Registro de núcleos IP

Los núcleos se encuentran en cores/<name>/ — un manifiesto core.json y uno o más archivos HDL. El servidor los descubre automáticamente al iniciarse y los recarga después de cualquier importación.

Se incluyen dos núcleos de referencia (uart_tx, fifo) para demostrar el formato. El registro no está pensado para crecer aquí — está impulsado por GitHub.

Obtención de núcleos en tiempo de ejecución

# Find a RISC-V softcore
search_github_cores("riscv softcore", language="verilog")

# Pull it in
import_github_core("YosysHQ/picorv32")

# It is now in the local registry
get_ip_core("picorv32")
generate_ip("picorv32", {"COMPRESSED_ISA": 1})

El servidor utiliza automáticamente los metadatos de FuseSoC CAPI2 (archivos .core) cuando los encuentra en el repositorio, lo que proporciona información más detallada sobre parámetros y puertos. Solo se aceptan repositorios con una licencia permitida.

Cómo contribuir con un núcleo

No abras PRs que añadan núcleos a este repositorio. En su lugar:

  1. Publica tu repositorio HDL en GitHub con el tema fpga y una licencia MIT

  2. Opcionalmente, añade un archivo .core de FuseSoC CAPI2 para obtener metadatos más ricos

  3. Cualquiera puede entonces ejecutar import_github_core("you/your-core") directamente

Esto mantiene el servidor ligero y permite que la comunidad crezca orgánicamente en GitHub.


Objetivos de síntesis

Objetivo

Fabricante / Familia

P&R OSS completo

ice40

Lattice iCE40

sí — nextpnr-ice40

ecp5

Lattice ECP5

sí — nextpnr-ecp5

nexus

Lattice Nexus (CrossLink-NX, CertusPro-NX)

sí — nextpnr-nexus

gowin

Gowin

sí — nextpnr-gowin

xilinx

Xilinx / AMD

Solo síntesis

intel

Intel / Altera

Solo síntesis

generic

Independiente de tecnología

Solo netlist

Valores comunes de device/package para place_and_route:

Objetivo

device

package

ice40

hx1k hx8k up5k lp1k

tq144 qn84 sg48 cm81

ecp5

25k 45k 85k

CABGA256 CABGA381

nexus

LIFCL-40-9BG400C

(incrustado en la cadena de device)

gowin

GW1N-UV4LQ144C6/I5

(incrustado en la cadena de device)


LiteX

LiteX es un framework de SoC en Python que puede apuntar a muchas placas FPGA. fpgaZeroMCP expone tres herramientas LiteX dedicadas y también acepta backend="litex" en synthesize y place_and_route.

# Dedicated tools
litex_build(board="arty", args=["--build"])
litex_soc(board="arty", args=["--no-compile"])
litex_flow(board="arty", args=["--build", "--output-dir", "build_arty"])

# As a backend in existing flow tools
synthesize(code="...", top_module="top", backend="litex", litex_board="arty")
place_and_route(code="...", top_module="top", target="ice40", device="hx1k",
                backend="litex", litex_board="arty", litex_args=["--build"])

Repositorios de núcleos locales

Puedes apuntar el registro a tus propios directorios HDL locales de dos maneras:

Variable de entorno:

Linux/macOS (separado por dos puntos):

export USERCORES_PATH=/home/you/my-cores:/home/you/work-cores

Windows (separado por punto y coma, PowerShell):

$env:USERCORES_PATH = "C:\Users\you\my-cores;C:\Users\you\work-cores"

Archivo de configuración (~/.fpgazero_mcp/config.json):

{
  "core_paths": [
    "/home/you/my-cores",
    "/home/you/work-cores"
  ]
}

Todas las rutas se escanean al inicio junto con el directorio integrado cores/.

Licencias permitidas

Por defecto, import_github_core acepta repositorios con cualquiera de estas licencias SPDX:

MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, ISC, GPL-2.0, GPL-3.0, LGPL-2.1, LGPL-3.0

Sobrescribe con la variable de entorno FPGAZERO_ALLOWED_LICENSES (identificadores SPDX separados por comas):

# Linux/macOS
export FPGAZERO_ALLOWED_LICENSES=MIT
export FPGAZERO_ALLOWED_LICENSES=MIT,Apache-2.0
# Windows (PowerShell)
$env:FPGAZERO_ALLOWED_LICENSES = "MIT"
$env:FPGAZERO_ALLOWED_LICENSES = "MIT,Apache-2.0"

Los identificadores de licencia siguen la notación SPDX. La comprobación se realiza en el momento de la importación; search_github_cores devuelve resultados independientemente de la licencia para que puedas evaluarlos antes de importar.


Pruebas

pip install -e ".[dev]"
python -m pytest tests/ -v

Algunas pruebas requieren las herramientas de OSS CAD Suite en PATH. Las pruebas que necesiten herramientas faltantes se omiten automáticamente.


Reducción de la huella de memoria

El servidor se ejecuta como un subproceso por sesión bajo transporte stdio (así es como los clientes MCP como Claude Desktop lo lanzan). Cada sesión ocupa ~60-90 MB de RSS en reposo en Linux, principalmente por el intérprete de Python y las dependencias.

Si ejecutas muchas sesiones MCP concurrentes, establece estas variables de entorno antes de lanzar tu cliente MCP:

# Linux — reduces glibc malloc arena fragmentation (can save 10-20 MB per session)
export MALLOC_ARENA_MAX=2

# Strip bytecode position annotations from tracebacks (saves a few MB)
export PYTHONNODEBUGRANGES=1

# Skip .pyc cache files (no memory impact, avoids disk writes)
export PYTHONDONTWRITEBYTECODE=1

Estos cambios no requieren código y son totalmente transparentes.


Variables de entorno

Variable

Descripción

GITHUB_TOKEN

Token de acceso personal de GitHub — aumenta los límites de tasa de la API

USERCORES_PATH

Directorios de búsqueda de cores adicionales (delimitados por el separador de rutas del sistema operativo)

FPGAZERO_ALLOWED_LICENSES

Identificadores SPDX separados por comas para import_github_core (predeterminado: MIT,BSD-2-Clause,BSD-3-Clause,Apache-2.0,ISC,GPL-2.0,GPL-3.0,LGPL-2.1,LGPL-3.0)

FPGAZERO_TMPDIR

Sobrescribe el directorio raíz del espacio de trabajo temporal

FPGAZERO_DATA_DIR

Raíz de los artefactos persistentes del servidor — registros de compilación, salida de LiteX, espacios de trabajo temporales (predeterminado: <install dir>/no_commit)

FPGAZERO_ALLOWED_DIRS

Lista de directorios adicionales separados por el separador de rutas del SO que project_dir puede leer y que start_build/place_and_route pueden usar como work_dir (además de cwd y $HOME)


Uso independiente / Scripting

La API de Python se puede usar directamente sin un cliente MCP:

from registry.resolver import CoreRegistry
from tools.lint import lint_hdl

reg = CoreRegistry()

# Import a core from GitHub
reg.import_github_core("ben-marshall/uart")

# Generate a parameterized instantiation
result = reg.generate_ip("uart", {"CLKS_PER_BIT": 868})
print(result["instantiation"])

# Lint some HDL
lint_hdl(open("my_design.v").read())
python example.py   # runs the built-in demo

Esquema de core.json

{
  "name": "my_core",
  "version": "1.0.0",
  "description": "...",
  "author": "you",
  "license": "MIT",
  "language": "verilog",
  "category": "communication",
  "tags": ["spi", "serial"],
  "parameters": {
    "DATA_WIDTH": { "type": "integer", "default": 8, "description": "..." }
  },
  "ports": {
    "clk": { "direction": "input", "width": 1, "description": "System clock" }
  },
  "files": ["my_core.v"]
}

Autor

Leonardo Capossio (bard0) — hello@bard0.com

Licencia

MIT — ver LICENSE.

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides AI assistants with a complete FPGA toolchain for HDL linting, simulation, synthesis, and place-and-route across various hardware targets. It features a GitHub-backed IP core registry that enables users to search for and import MIT-licensed cores directly through their chat interface.
    15
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for deterministic Vivado FPGA automation including project scaffolding, simulation, synthesis, implementation, and gated bitstream generation.
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A minimal MCP server that provides 25 tools and 5 hooks to control Xilinx Vivado EDA for FPGA development, including session management, Tcl execution, smart diagnostics, and IP debugging.
    30
    99
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • A MCP server built for developers enabling Git based project management with project and personal…

  • MCP Server for JFrog, providing tools for development and artifact management.

  • An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform

View all MCP Connectors

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/lcapossio/fpgaZeroMCP'

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