Skip to main content
Glama

WEFT — WEFT Elaborates FPGA Toolchains

MCP-сервер, который предоставляет LLM-клиенту безопасный структурированный интерфейс к потоку Intel Quartus Prime 25.1 для ПЛИС: линтинг и симуляция за секунды, асинхронная компиляция и чтение результатов в виде JSON вместо мегабайт логов.

Название — рекурсивный акроним в стиле GNU. Уток (weft) — это нить, которую ткут поперёк основы, чтобы получить ткань (fabric), а трассировка логики в ткань ПЛИС — как раз эта задача.

Статус

WEFT находится в разработке, этап за этапом. Что готово на сегодняшний день:

Инструмент

Состояние

lint

работает — Verilator для Verilog и SystemVerilog, GHDL для VHDL

simulate

работает — Verilator, Icarus или GHDL, с захватом сигналов в波形

Проекты Quartus

работают — create_project, set_assignments, get_project_info, list_projects

Компиляция Quartus

работает — start_compile как постоянное задание, get_job_status, get_job_log, cancel_job

parse_reports

работает — ресурсы, тайминг по каждым часам, ранжированные сообщения

Индексация исходников

работает — index_project, get_module_info, get_hierarchy, search_code

RAG по документам с OCR

ещё нет

Генерация документации

ещё нет

Программирование устройств

ещё нет

Оба транспорта работают: stdio для локального клиента, Streamable HTTP за статическим bearer-токеном для клиента в локальной сети.

Related MCP server: fpgaZeroMCP

Для чего это нужно, если вы не знакомы с MCP

Допустим, тестбенч падает, и вы хотите, чтобы модель помогла с ним разобраться. Сегодня вы копируете файл в окно чата, сами запускаете Verilator, вставляете экран %Warning-WIDTHEXPAND после него, читаете ответ, вручную применяете исправление и повторяете всё заново. Проект состоит из трёх файлов, так что либо вы вставляете все три, либо модель угадывает два пропущенных — и она будет угадывать уверенно. Ответ, который вы получите, касается вставленного текста, а не обязательно того, что лежит на диске.

MCP, Протокол контекста модели, устраняет эту пересылку. Сервер публикует список инструментов и аргументы каждого из них. LLM-клиент — Claude Desktop, Claude Code или что-то ещё, говорящее на этом протоколе, — показывает этот список модели. Вы продолжаете печатать текст. Модель выбирает инструмент, заполняет аргументы, и клиент отправляет вызов. WEFT — это сервер на другом конце. Он не содержит модели, не выполняет инференс и не совершает сетевых вызовов во время работы.

Когда модель вызывает lint, WEFT разрешает все пути относительно корня вашего рабочего пространства, отклоняет всё, что выходит за его пределы, и выполняет примерно следующее:

podman run --rm --network=none -v <workspace>:/work -w /work weft-tools \
    verilator --lint-only -Isrc src/updown_counter.sv

Verilator печатает то, что всегда печатает. WEFT превращает это в записи — файл, строка, серьёзность, сообщение, — и контейнер исчезает. simulate — тот же цикл вокруг Verilator, Icarus или GHDL, возвращающий пройдено/не пройдено, хвост лога и путь к波形.

Граница важнее, чем внутренняя кухня: модель выбирает, что попытаться сделать, WEFT решает, что может выполняться. На том конце нет оболочки. Модель не может придумать флаг, не может получить доступ к пути, который вы ей не открыли, и не может запустить ничего, чего нет в списке.

Другая причина оборачивать инструменты — размер. Компиляция Quartus оставляет мегабайты .rpt, а вам от неё нужны были строка о ресурсах, Fmax для каждого тактового домена и два важных предупреждения. Результаты инструментов здесь — несколько килобайт JSON; необработанные логи остаются на диске и запрашиваются по имени, когда они действительно нужны.

Ничто из этого ничего не проектирует. Это не напишет ваш RTL, не закроет тайминг и не узнает, какая плата у вас на столе. Оно запускает команды, которые вы запустили бы сами, и возвращает что-то достаточно маленькое, чтобы об этом можно было рассуждать.

Как это устроено

Quartus работает на хосте — WEFT управляет уже установленной у вас версией и никогда не пытается её устанавливать или помещать в контейнер. Всё остальное, что выполняет WEFT, живёт в одном образе Podman, weft-tools: Verilator, Icarus Verilog, GHDL и Verible для работы с HDL, Tesseract и Poppler для чтения документов. Контейнер запускается с --network=none и видит только ваше рабочее пространство.

Каждый путь, который предоставляет MCP-клиент, разрешается и проверяется на соответствие настроенному корню рабочего пространства до того, как попадёт в файловую систему — и на хосте, и внутри контейнера.

Ничего не выходит в сеть во время выполнения, и никакой телеметрии не отправляется.

Полное описание — аргументы и возвращаемые типы каждого инструмента, этапы и обоснование неудобных решений — в PROJECT.md.

Требования

  • Quartus Prime 25.1 (Lite, Standard или Pro), установленный и лицензированный вами

  • Podman, rootless

  • Python 3.11 или новее

  • jtagd для программирования оборудования, когда этот этап наступит

Быстрый старт

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 — лишь рекомендуемая зависимость podman, поэтому обычный apt install его подтянет, а --no-install-recommends — нет. Rootless Podman без него не работает.

В Ubuntu 22.04 — Python 3.10, что ниже требований WEFT. Либо переходите на 24.04, либо установите более новый интерпретатор, например с помощью uv:

uv venv --python 3.12 && uv pip install .

Сборка образа

Образ никогда не распространяется — вы собираете его сами, что оставляет дистрибутив WEFT в рамках кода под GPL-3.0-only и позволяет не поставлять агрегат сторонних бинарников под смешанными лицензиями. podman build — единственный шаг, которому нужен доступ в сеть; всё остальное работает офлайн.

GHDL компилируется из исходников во время сборки, так что в первый раз придётся подождать.

Настройка

WEFT читает один TOML-файл, по умолчанию ~/.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"

Пути к Quartus всегда берутся отсюда. WEFT никогда их не угадывает и не ищет в PATH. На машине без Quartus раздел просто опускается — для линтинга и симуляции он не нужен.

Неизвестные ключи вызывают ошибку, а не игнорируются, так что опечатка проявится при запуске, а не молча ничего не сделает.

Запуск

Локальный клиент через stdio:

weft --transport stdio

Для Claude Desktop или Claude Code зарегистрируйте его как MCP-сервер:

{
  "mcpServers": {
    "weft": {
      "command": "weft",
      "args": ["--transport", "stdio", "--config", "/home/you/.config/weft/weft.toml"]
    }
  }
}

В локальной сети через Streamable HTTP:

weft --transport http

Каждый запрос должен содержать Authorization: Bearer <token>; всё остальное получит 401. Укажите настоящий токен в конфигурации — HTTP-транспорт откажется запускаться без него.

Зачем вообще нужен HTTP-транспорт

Локальному клиенту он не нужен; stdio проще, и токен нечему утекать. HTTP существует потому, что это точка передачи для запуска за моделью, которую вы размещаете сами, в сети без выхода наружу. Такая модель, обслуживаемая за OpenAI-совместимой конечной точкой, общается с той же конечной точкой /mcp, и на стороне сервера ничего не меняется. WEFT и так не совершает сетевых вызовов во время выполнения, поэтому установленному серверу больше ничего не нужно.

Построение этого развёртывания — кластер инференса, стек обслуживания, перенос образа и пакетов через разрыв — не входит в этот репозиторий. Приложение A в PROJECT.md фиксирует, что для этого потребуется, и намеренно на этом останавливается.

Демонстрационный проект

examples/counter/ — небольшой счётчик MAX 10, написанный одновременно на SystemVerilog, Verilog-2001 и VHDL. Три языка — в этом суть: ни один симулятор с открытым исходным кодом не читает больше одного, так что проект — честная проверка того, действительно ли инструмент обрабатывает смешанную иерархию или только претендует на это.

Участие

Патчи приветствуются. WEFT следует привычкам ядра Linux: одно логическое изменение на коммит, темы вида подсистема: краткое описание, тело с объяснением почему, rebase вместо merge и строка Signed-off-by: во всём. См. CONTRIBUTING.md.

Автор

WEFT написан и сопровождается Матеушем Окуланисомfpgartktic.github.io, @FPGArtktic, FPGArtktic@outlook.com.

Отчёты об ошибках, патчи и возражения приветствуются — последние особенно, если вы работали с этим инструментарием усерднее, чем я.

Лицензия

Copyright (C) 2026 Mateusz Okulanis.

GPL-3.0-only. Полный текст — в COPYING.

WEFT вызывает Quartus и инструменты в контейнерах как отдельные программы и не распространяет ни один из них.

Товарные знаки

Intel, Altera и Quartus являются товарными знаками соответствующих владельцев. Этот проект не аффилирован с Intel или Altera, не одобрен ими и не спонсируется ими. Он не содержит кода, файлов или документации Intel или Altera и не устанавливает и не распространяет их программное обеспечение.

A
license - permissive license
Not graded
quality - not tested
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
    C
    quality
    D
    maintenance
    Provides 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.
    5
    MIT
  • 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
    A
    quality
    C
    maintenance
    Wraps 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.
    16
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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

View all related MCP servers

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.

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/FPGArtktic/weft-mcp'

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