WEFT
WEFT — WEFT Elaborates FPGA Toolchains
Un servidor MCP que ofrece a un cliente LLM una interfaz segura y estructurada para un flujo FPGA Intel Quartus Prime 25.1: lint y simulación en segundos, compilación asíncrona, y lectura de resultados como JSON en lugar de megabytes de registro.
El nombre es un acrónimo recursivo al estilo GNU. La trama es el hilo que se teje a lo largo de la urdimbre para formar el tejido, y enrutar la lógica en el tejido FPGA es precisamente el trabajo.
Estado
WEFT está en construcción, hito a hito. Lo que está terminado hoy:
Herramienta | Estado |
| funcionando — Verilator para Verilog y SystemVerilog, GHDL para VHDL |
| funcionando — Verilator, Icarus o GHDL, con captura de formas de onda |
Proyectos Quartus | funcionando — |
Compilación Quartus | funcionando — |
| funcionando — recursos, tiempos por reloj, mensajes clasificados |
Indexación de fuentes | funcionando — |
RAG de documentos con OCR | aún no |
Generación de documentación | aún no |
Programación de dispositivos | aún no |
Ambos transportes funcionan: stdio para un cliente local, Streamable HTTP detrás de un token Bearer estático para un cliente en la LAN.
Related MCP server: fpgaZeroMCP
Para qué sirve esto, si MCP es nuevo para ti
Supón que un banco de pruebas falla y quieres la ayuda de un modelo. Hoy copias el archivo en una ventana de chat, ejecutas Verilator tú mismo, pegas una pantalla llena de %Warning-WIDTHEXPAND después, lees la respuesta, aplicas la corrección a mano, y vuelves a empezar. El diseño tiene tres archivos de profundidad, así que o pegas los tres o el modelo adivina los dos que omitiste — y adivinará, con seguridad. La respuesta que obtienes trata sobre el texto que pegaste, que no es necesariamente lo que hay en el disco.
MCP, el Model Context Protocol, elimina el trasiego. Un servidor anuncia una lista de herramientas y los argumentos que acepta cada una. Un cliente LLM — Claude Desktop, Claude Code, o cualquier otra cosa que hable el protocolo — pone esa lista delante del modelo. Tú sigues escribiendo prosa. El modelo elige una herramienta, rellena los argumentos, y el cliente envía la llamada. WEFT es el servidor en el otro extremo. No contiene ningún modelo, no ejecuta inferencia, y no hace llamadas de red en tiempo de ejecución.
Cuando el modelo llama a lint, WEFT resuelve cada ruta contra la raíz de tu espacio de trabajo, rechaza cualquier cosa que se escape de ella, y ejecuta aproximadamente esto:
podman run --rm --network=none -v <workspace>:/work -w /work weft-tools \
verilator --lint-only -Isrc src/updown_counter.svVerilator imprime lo que siempre imprime. WEFT convierte eso en registros — archivo, línea, gravedad, mensaje — y el contenedor desaparece. simulate es el mismo bucle alrededor de Verilator, Icarus o GHDL, devolviendo aprobado/fallido, una cola del registro y la ruta a la forma de onda.
El límite importa más que la fontanería: el modelo elige qué intentar, WEFT elige qué puede ejecutarse. No hay shell en el otro extremo. El modelo no puede inventar una opción, no puede alcanzar una ruta que no le hayas abierto, y no puede ejecutar nada que no esté en la lista.
La otra razón para envolver las herramientas es el tamaño. Una compilación de Quartus deja megabytes de .rpt detrás, y lo que querías de ella era una línea de recursos, un Fmax por dominio de reloj, y los dos avisos que importaban. Los resultados de las herramientas aquí son unos pocos kilobytes de JSON; los registros brutos permanecen en el disco y se obtienen por nombre cuando algo realmente los necesita.
Nada de esto diseña nada. No escribirá tu RTL, no cerrará tu temporización, ni sabrá qué placa hay en tu escritorio. Ejecuta los comandos que tú habrías ejecutado, y devuelve algo lo bastante pequeño como para razonar sobre ello.
Cómo está montado
Quartus se ejecuta en el host — WEFT maneja la instalación que ya tienes y nunca intenta instalarla o contenerizarla. Todo lo demás que WEFT ejecuta vive en una imagen de Podman, weft-tools: Verilator, Icarus Verilog, GHDL y Verible para trabajo HDL, Tesseract y Poppler para leer documentos. El contenedor se ejecuta con --network=none y no ve nada más que tu espacio de trabajo.
Cada ruta que un cliente MCP proporciona se resuelve y se comprueba contra la raíz del espacio de trabajo configurada antes de llegar al sistema de archivos, tanto en el host como dentro del contenedor.
Nada llega a la red en tiempo de ejecución, y nada reporta telemetría.
El diseño completo — los argumentos y la forma de retorno de cada herramienta, los hitos, y el razonamiento detrás de las partes incómodas — está en PROJECT.md.
Requisitos
Quartus Prime 25.1 (Lite, Standard o Pro) instalado y licenciado por ti
Podman, rootless
Python 3.11 o más reciente
jtagdpara programar hardware, cuando ese hito llegue
Inicio rápido
Arch Linux
sudo pacman -S --needed podman python git
git clone https://github.com/FPGArtktic/weft-mcp.git
cd weft-mcp
podman build -t weft-tools -f containers/Containerfile.weft-tools .
pip install --user .Ubuntu 24.04 LTS
sudo apt update
sudo apt install podman uidmap python3 python3-pip git
git clone https://github.com/FPGArtktic/weft-mcp.git
cd weft-mcp
podman build -t weft-tools -f containers/Containerfile.weft-tools .
pip install --user .uidmap es solo un Recommends de podman, así que un apt install simple lo incluye, pero --no-install-recommends no. Podman rootless lo necesita.
Ubuntu 22.04 incluye Python 3.10, que está por debajo de lo que WEFT necesita. O bien muévete a 24.04 o instala un intérprete más reciente, por ejemplo con uv:
uv venv --python 3.12 && uv pip install .Construir la imagen
La imagen nunca se distribuye — la construyes tú, lo que mantiene la distribución de WEFT como código solo GPL-3.0 y evita enviar un agregado de binarios de terceros bajo licencias mixtas. podman build es el único paso que necesita acceso a la red; todo lo demás se ejecuta sin conexión.
GHDL se compila desde el código fuente durante la construcción, así que espera que tarde un buen rato la primera vez.
Configuración
WEFT lee un único archivo TOML, por defecto ~/.config/weft/weft.toml:
[workspace]
# Nothing outside this directory can be read or written.
root = "/home/you/fpga"
[container]
image = "weft-tools"
[quartus]
edition = "lite" # omit when only one edition is configured
[quartus.lite]
root = "/home/you/intelFPGA_lite/25.1std/quartus"
[quartus.pro]
root = "/opt/intelFPGA_pro/25.1/quartus"
# FlexLM variables are passed through to every Pro invocation.
env = { LM_LICENSE_FILE = "1800@licence-server" }
[jobs]
timeout_s = 7200
[http]
host = "127.0.0.1"
port = 8080
token = "put-a-long-random-string-here"Las rutas de Quartus siempre vienen de aquí. WEFT nunca las adivina y nunca busca en PATH. Una máquina sin Quartus simplemente omite la sección — lint y simulate no la necesitan.
Las claves desconocidas se rechazan en lugar de ignorarse, así que un error tipográfico falla al inicio en lugar de no hacer nada silenciosamente.
Ejecución
Cliente local, a través de stdio:
weft --transport stdioPara Claude Desktop o Claude Code, regístralo como servidor MCP:
{
"mcpServers": {
"weft": {
"command": "weft",
"args": ["--transport", "stdio", "--config", "/home/you/.config/weft/weft.toml"]
}
}
}En la LAN, a través de Streamable HTTP:
weft --transport httpCada solicitud debe llevar Authorization: Bearer <token>; cualquier otra cosa recibe un 401. Establece un token real en la configuración — el transporte HTTP se niega a arrancar sin uno.
Por qué existe un transporte HTTP
Un cliente local no lo necesita; stdio es más simple y no tiene token que pueda filtrarse. HTTP existe porque es el punto de traspaso para ejecutar esto detrás de un modelo que alojas tú mismo, en una red sin salida. Un modelo así, servido tras un endpoint compatible con OpenAI, habla con el mismo endpoint /mcp, y nada cambia en el lado del servidor. WEFT ya no hace llamadas de red en tiempo de ejecución, así que un servidor instalado no necesita nada más.
Construir ese despliegue — el clúster de inferencia, la pila de servicio, llevar la imagen y las ruedas a través de la brecha — no forma parte de este repositorio. El Apéndice A de PROJECT.md registra lo que haría falta y se detiene ahí, deliberadamente.
El proyecto de demostración
examples/counter/ es un pequeño contador MAX 10 escrito en SystemVerilog, Verilog-2001 y VHDL a la vez. Los tres lenguajes son el punto: ningún simulador de código abierto lee más de uno, así que el proyecto es una prueba justa de si una herramienta realmente maneja una jerarquía mixta o solo lo afirma.
Contribuciones
Los parches son bienvenidos. WEFT sigue las costumbres del kernel de Linux: un cambio lógico por commit, asuntos subsystem: summary, un cuerpo que explique el porqué, rebase en lugar de merge, y una línea Signed-off-by: en todo. Consulta CONTRIBUTING.md.
Autor
WEFT está escrito y mantenido por Mateusz Okulanis — fpgartktic.github.io, @FPGArtktic, FPGArtktic@outlook.com.
Los informes de errores, los parches y los desacuerdos son todos bienvenidos — especialmente los últimos, si has llevado esta cadena de herramientas más lejos de lo que yo lo he hecho.
Licencia
Copyright (C) 2026 Mateusz Okulanis.
GPL-3.0-only. El texto completo está en COPYING.
WEFT invoca a Quartus y a las herramientas contenerizadas como programas separados y no distribuye ninguna de ellas.
Marcas comerciales
Intel, Altera y Quartus son marcas comerciales de sus respectivos propietarios. Este proyecto no está afiliado a Intel o Altera, ni respaldado ni patrocinado por ellos. No contiene código, archivos ni documentación de Intel o Altera, y no instala ni redistribuye su software.
This server cannot be installed
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 Servers
- AlicenseCqualityDmaintenanceProvides programmatic access to Arcas OnlineEDA platform for electronic design automation, enabling formal verification, equivalence checking, power analysis, security verification, and FPGA design through natural language and automated workflows.5MIT
- AlicenseAqualityCmaintenanceProvides 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.151MIT
- AlicenseAqualityCmaintenanceWraps Quartus II 9.1 command-line tools into MCP tools, enabling AI agents to create projects, assign pins, generate simulation waveforms, run simulations, compile, read reports, and program devices.164MIT
- 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
Related MCP Connectors
Deterministic validation for AI-generated artifacts: JSON Schema, OpenAPI response, SQL syntax.
Proves AI-generated Python does what you asked: lint, types, security, sandbox run, exact fixes.
Compiles structured specs into SCORM 1.2/2004 e-learning packages. 30 tools, quality gate, no LLM.
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/FPGArtktic/weft-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server