Skip to main content
Glama

fpgaZeroMCP

CI License: MIT Python MCP

AI 어시스턴트에게 완전한 FPGA 툴체인(린트, 시뮬레이션, 합성, 배치 및 배선, 비트스트림 프로그래밍)과 GitHub 기반의 실시간 IP 코어 레지스트리를 제공하는 오픈 소스 Model Context Protocol 서버입니다.

AI에게 코어를 검색하고 가져오거나, HDL을 린트하고, 디스크에 있는 다중 파일 VHDL 또는 Verilog 프로젝트를 합성하고, 시뮬레이션을 실행한 다음, 비트스트림을 보드에 플래싱하도록 요청하세요. 이 모든 작업을 채팅 창을 떠나지 않고 수행할 수 있습니다.

기능

  • 다중 언어: Verilog, SystemVerilog, VHDL (ghdl-yosys-plugin 사용)

  • 세 가지 입력 모드: 인라인 code 문자열, 다중 파일 files 딕셔너리, 또는 디스크의 project_dir 경로

  • 파일 리스트 지원: +incdir+, +define+ 및 중첩된 -f 지시문이 포함된 files.f/sources.f 지원

  • 보드 프리셋: 11개의 내장 보드(iCEBreaker, ULX3S, TinyFPGA BX, Tang Nano 등) — 대상/장치/패키지/클럭 자동 설정

  • 제약 조건 자동 감지: 프로젝트 디렉토리에서 .pcf/.lpf/.pdc/.cst 파일 탐색

  • 비트스트림 프로그래밍: iceprog(iCE40) 또는 openFPGALoader(ECP5/Gowin/Nexus)를 통한 플래싱

  • 시뮬레이션 결과 파싱: VCD 신호 요약과 함께 PASS/FAIL/UVM 패턴 감지

  • 백그라운드 빌드: 상태 폴링 및 엄격한 EDA 전용 명령 허용 목록을 통한 장시간 합성/PnR 실행

  • IP 코어 레지스트리: FuseSoC CAPI2 메타데이터를 사용하여 GitHub에서 실시간 검색 및 가져오기

  • 상태 확인: 설치되어 있고 접근 가능한 OSS CAD Suite 도구 확인


Related MCP server: Vibe Coder MCP Server

목차


작동 원리

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

MCP 서버는 로컬 하위 프로세스로 실행됩니다. AI는 JSON-RPC(stdio)를 통해 서버의 도구를 호출합니다. 서버는 OSS CAD Suite의 Yosys, nextpnr, iverilog, Verilator 등을 호출하며, GitHub에서 오픈 소스 FPGA 코어를 직접 가져올 수 있습니다.


전제 조건

요구 사항

참고 사항

Python 3.11+

OSS CAD Suite

iverilog, Yosys, nextpnr, Verilator, Verible, GHDL을 한 번에 다운로드

LiteX + litex-boards

선택 사항 — LiteX 도구에만 필요

설치 후 OSS CAD Suite를 PATH에 추가하세요. 도구가 누락된 경우 모든 도구 래퍼는 정상적으로 작동을 중단합니다.

GitHub API 액세스

GitHub API 요청은 기본적으로 인증되지 않으며 속도 제한이 적용됩니다. 제한을 늘리려면 개인 액세스 토큰을 설정하세요:

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

설치

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

MCP 클라이언트 설정

Claude Desktop

claude_desktop_config.json에 추가:

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

VS Code (GitHub Copilot)

워크스페이스의 .vscode/mcp.json에 추가:

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

Cursor / Windsurf

MCP 설정(설정 → MCP 서버)에 추가:

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

예시 프롬프트

  • "I2C 마스터 코어를 찾아서 가져와줘."

  • "~/projects/my_fpga에 있는 VHDL 파일을 합성하고 LUT 개수를 알려줘."

  • "iCEBreaker 보드용으로 내 프로젝트를 PnR하고 플래싱해줘."

  • "더 나은 타이밍을 위해 시드 42로 배치 및 배선을 실행해줘."

  • "이 Verilog를 린트하고 오류를 수정해줘."

  • "이 FIFO를 시뮬레이션하고 테스트벤치가 통과했는지 알려줘."

  • "이 SystemVerilog 파일 형식을 지정해줘."

  • "어떤 OSS CAD Suite 도구가 설치되어 있어?"


도구

HDL 품질

도구

설명

lint_hdl

iverilog(V/SV) 또는 GHDL(VHDL)을 통한 구문/오류 검사 — 단일 파일

lint_project

교차 모듈 참조가 해결되도록 여러 파일을 함께 린트

get_diagnostics

구조화된 라인별 진단 — Verilator → verible 폴백(V/SV), GHDL(VHDL)

format_hdl

verible-verilog-format(V/SV) 또는 vsg(VHDL)를 통한 자동 형식 지정

설계 흐름

도구

설명

simulate

테스트벤치 컴파일 및 실행 — iverilog(V/SV) 또는 GHDL(VHDL). 결과 + VCD 요약 반환

synthesize

리소스 통계가 포함된 Yosys 합성. code, files 또는 project_dir 허용. Verilog, SV, VHDL

place_and_route

Yosys + nextpnr을 한 단계로 실행. 보드 프리셋, 제약 조건 자동 감지, 비트스트림 출력

program_fpga

iceprog 또는 openFPGALoader를 통해 비트스트림 플래싱

list_boards

내장 보드 프리셋(대상/장치/패키지/클럭) 열거

IP 코어 레지스트리

도구

설명

list_ip_cores

로컬 레지스트리 탐색, 카테고리별 필터링

get_ip_core

코어에 대한 매니페스트 및 HDL 소스 가져오기

generate_ip

매개변수화된 인스턴스화 스니펫 + 소스 파일 가져오기

search_github_cores

MIT 라이선스 FPGA IP 저장소에 대해 GitHub 검색

import_github_core

GitHub 저장소를 로컬 레지스트리로 다운로드

import_fusesoc_core

로컬 FuseSoC CAPI2 .core 파일 가져오기

LiteX

도구

설명

litex_build

--build와 함께 LiteX 보드 대상 실행

litex_soc

게이트웨어를 빌드하지 않고 LiteX SoC 생성

litex_flow

완전히 사용자 정의된 인수를 사용하여 LiteX 보드 대상 실행

빌드 관리

도구

설명

start_build

백그라운드에서 장시간 실행되는 명령 시작(허용된 EDA 도구만)

build_status

진행 상황 확인 — 상태, 경과 시간, 파싱된 단계/사용률/타이밍

list_builds

추적 중인 모든 빌드(실행 중 및 완료됨) 나열

cancel_build

실행 중인 백그라운드 빌드 종료

cleanup_build_logs

나이 및 총 크기에 따라 오래된 빌드 로그 삭제

서버 / 레지스트리

도구

설명

check_tools

경로 및 버전과 함께 설치된 OSS CAD Suite 도구 보고

reload_registry

서버를 다시 시작하지 않고 코어 디렉토리 다시 스캔


IP 코어 레지스트리

코어는 cores/<name>/에 위치하며, core.json 매니페스트와 하나 이상의 HDL 파일로 구성됩니다. 서버는 시작 시 자동으로 이를 검색하고 가져오기 후 다시 로드합니다.

형식을 보여주기 위해 두 개의 참조 코어(uart_tx, fifo)가 포함되어 있습니다. 레지스트리는 여기서 성장하기 위한 것이 아닙니다 — GitHub에 의해 구동됩니다.

런타임에 코어 가져오기

# 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})

서버는 저장소에서 발견되면 FuseSoC CAPI2 메타데이터(.core 파일)를 자동으로 사용하여 더 풍부한 매개변수 및 포트 정보를 제공합니다. 허용된 라이선스가 있는 저장소만 허용됩니다.

코어 기여하기

이 저장소에 코어를 추가하는 PR을 열지 마세요. 대신:

  1. fpga 토픽과 MIT 라이선스로 GitHub에 HDL 저장소를 게시하세요.

  2. 선택적으로 더 풍부한 메타데이터를 위해 FuseSoC CAPI2 .core 파일을 추가하세요.

  3. 누구나 import_github_core("you/your-core")를 통해 직접 가져올 수 있습니다.

이렇게 하면 서버가 가볍게 유지되고 커뮤니티가 GitHub에서 유기적으로 성장할 수 있습니다.


합성 대상

대상

공급업체 / 제품군

전체 OSS P&R

ice40

Lattice iCE40

예 — nextpnr-ice40

ecp5

Lattice ECP5

예 — nextpnr-ecp5

nexus

Lattice Nexus (CrossLink-NX, CertusPro-NX)

예 — nextpnr-nexus

gowin

Gowin

예 — nextpnr-gowin

xilinx

Xilinx / AMD

합성 전용

intel

Intel / Altera

합성 전용

generic

기술 독립적

넷리스트 전용

place_and_route에 대한 일반적인 장치/패키지 값:

대상

장치

패키지

ice40

hx1k hx8k up5k lp1k

tq144 qn84 sg48 cm81

ecp5

25k 45k 85k

CABGA256 CABGA381

nexus

LIFCL-40-9BG400C

(장치 문자열에 포함됨)

gowin

GW1N-UV4LQ144C6/I5

(장치 문자열에 포함됨)


LiteX

LiteX는 많은 FPGA 보드를 대상으로 할 수 있는 Python SoC 프레임워크입니다. fpgaZeroMCP는 세 가지 전용 LiteX 도구를 노출하며 synthesize 및 place_and_route에서 backend="litex"도 허용합니다.

# 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"])

로컬 코어 저장소

두 가지 방법으로 레지스트리를 자신의 로컬 HDL 디렉토리에 지정할 수 있습니다:

환경 변수:

Linux/macOS (콜론으로 구분):

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

Windows (세미콜론으로 구분, PowerShell):

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

설정 파일 (~/.fpgazero_mcp/config.json):

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

모든 경로는 시작 시 내장 cores/ 디렉토리와 함께 스캔됩니다.

허용된 라이선스

기본적으로 import_github_core는 다음 SPDX 라이선스 중 하나를 가진 저장소를 허용합니다:

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

FPGAZERO_ALLOWED_LICENSES 환경 변수(쉼표로 구분된 SPDX ID)로 재정의하세요:

# 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"

라이선스 ID는 SPDX 표기법을 따릅니다. 확인은 가져오기 시점에 수행됩니다. search_github_cores는 가져오기 전에 평가할 수 있도록 라이선스에 관계없이 결과를 반환합니다.


테스트

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

일부 테스트는 PATH에 OSS CAD Suite 도구가 필요합니다. 누락된 도구가 필요한 테스트는 자동으로 건너뜁니다.


환경 변수

변수

설명

GITHUB_TOKEN

GitHub 개인 액세스 토큰 — API 속도 제한을 높임

USERCORES_PATH

추가 코어 검색 디렉토리 (OS 경로 구분 기호로 구분)

FPGAZERO_ALLOWED_LICENSES

import_github_core에 대한 쉼표로 구분된 SPDX ID (기본값: 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

임시 작업 공간 루트 디렉토리 재정의

FPGAZERO_ALLOWED_DIRS

project_dir이 읽을 수 있는 추가 디렉토리의 OS 경로 구분 기호로 구분된 목록 (cwd 및 $HOME 외에)


독립 실행형 / 스크립팅

Python API는 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

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"]
}

작성자

Leonardo Capossio (bard0) — hello@bard0.com

라이선스

MIT — LICENSE를 참조하세요.

Available Tools

15 tools
format_hdlA

Format HDL source code and return the result. Verilog/SystemVerilog: uses verible-verilog-format. VHDL: uses vsg (pip install vsg). Returns the formatted code and whether it changed.

NameRequiredDescriptionDefault
codeYesHDL source code to format
languageNoHDL language variantverilog

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses that the tool returns formatted code and a change indicator, and names the underlying formatters. However, since no annotations are provided, the description bears full burden; it does not explicitly state whether the tool modifies files or is read-only, nor does it cover potential side effects.

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

Conciseness5/5

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

The description is concise: three sentences front-load the main action and provide key details without redundancy. Every sentence adds value.

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

Completeness4/5

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

With only two parameters having full schema coverage and no output schema, the description explains the return value and underlying tools. It could mention installation requirements or side effects but is sufficiently complete for a low-complexity tool.

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 covers both parameters with descriptions (100% coverage). The description adds context about the formatters used per language but does not provide additional semantic details beyond the schema, warranting a baseline score of 3.

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's purpose: formatting HDL source code and returning the result. It specifies the tools used for Verilog/SystemVerilog and VHDL, distinguishing it from sibling tools like lint_hdl and synthesize.

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?

The description implies that the tool should be used to format HDL code but provides no explicit guidance on when to use it versus alternatives like lint_hdl for linting. No exclusions or prerequisites are mentioned.

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

generate_ipB

Generate a parameterized instance of an IP core. Returns the HDL source files and a ready-to-paste Verilog instantiation snippet with the requested parameter values applied.

NameRequiredDescriptionDefault
nameYesCore name, e.g. 'uart_tx' or 'fifo'
parametersNoParameter overrides, e.g. {"CLKS_PER_BIT": 434}
instance_nameNoVerilog instance name (default: <core_name>_inst)

TDQS

B3.3/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 fully disclose behavioral traits. It mentions the return type (HDL files and snippet) but omits side effects, permission requirements, error handling, or whether the tool consumes external resources. Without annotations, this lack of safety and behavioral detail is a significant gap.

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

Conciseness5/5

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

Two sentences, no fluff, front-loaded with action and output. Every sentence is informative and earns its place.

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

Completeness3/5

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

Given no output schema and moderate complexity (3 params, one nested object), the description covers the basic purpose and return type but lacks details on expected structure of HDL files, error conditions, and dependencies. It is adequate but leaves gaps that could mislead an agent.

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 coverage is 100%, so baseline is 3. The description adds minimal value ('with the requested parameter values applied') and does not elaborate on the 'parameters' object structure or validation rules beyond the schema. No additional semantic guidance is provided.

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 uses a specific verb ('Generate') and resource ('parameterized instance of an IP core'), clearly stating the output: 'HDL source files and a ready-to-paste Verilog instantiation snippet'. This distinguishes it from sibling tools like get_ip_core (which likely retrieves without generating) and list_ip_cores (which lists cores).

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 explicit guidance on when to use this tool versus alternatives. With many sibling tools (e.g., get_ip_core, list_ip_cores, import_*), the description fails to mention scenarios where other tools would be more appropriate, leaving the agent to infer usage context.

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

get_diagnosticsB

Return structured lint diagnostics (line, column, severity, message) for HDL source. Verilog/SystemVerilog: uses Verilator (primary) with verible-verilog-lint as fallback. VHDL: uses GHDL. All tools are part of OSS CAD Suite.

NameRequiredDescriptionDefault
codeYesHDL source code
languageNoHDL language variantverilog

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the toolchain (Verilator with fallback, GHDL) and mentions OSS CAD Suite, which is helpful. However, it lacks information on side effects, error behavior, required permissions, or performance implications. The read-only nature is implied but not stated.

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

Conciseness5/5

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

The description is extremely concise with two sentences, no redundant information. The first sentence defines purpose and output structure, the second provides toolchain details. Every sentence earns its place.

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

Completeness4/5

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

Given the lack of an output schema, the description compensates by listing the output fields (line, column, severity, message). It also explains language-tool mapping. However, it does not address error cases or tool availability, but overall it is fairly complete for a diagnostic tool.

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 provides 100% coverage with descriptions for both parameters. The description adds no additional parameter-level meaning beyond what the schema already conveys. Baseline score of 3 is appropriate as the description does not enhance parameter understanding.

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 tool returns structured lint diagnostics with specific fields (line, column, severity, message). It identifies the resource as 'HDL source' and distinguishes by specifying the toolchain per language. However, it does not explicitly differentiate from sibling tools like 'lint_hdl' or 'lint_project', leaving room for ambiguity.

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 guidance is provided on when to use this tool versus alternatives. It does not mention when not to use it, prerequisites, or context. The sibling list includes similar tools like 'lint_hdl', but the description offers no basis for selection.

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

get_ip_coreB

Fetch the full manifest and HDL source files for a named IP core.

NameRequiredDescriptionDefault
nameYesCore name, e.g. 'uart_tx' or 'fifo'

TDQS

B3.3/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 fully convey behavioral traits. It only states the action but does not disclose whether the tool is read-only, any required permissions, side effects, or output format. This is insufficient for a fetch operation.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the purpose. No extraneous words, every part adds value.

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

Completeness3/5

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

With no output schema or annotations, the description is somewhat limited. It explains what the tool does but does not specify what is returned (e.g., raw files, metadata). For a simple fetch, it is minimally adequate but could provide more context about expected output.

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 provides a complete description for the only parameter 'name' (e.g., core name with examples). The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

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 uses a specific verb ('Fetch') and identifies the resource ('full manifest and HDL source files') and the input ('named IP core'). It clearly distinguishes from siblings like 'list_ip_cores' and 'generate_ip'.

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?

There is no guidance on when to use this tool vs alternatives such as 'search_github_cores' or 'import_fusesoc_core'. The description does not mention prerequisites or when it is appropriate to use.

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

import_fusesoc_coreA

Import a local FuseSoC CAPI2 .core file into the registry. HDL files referenced in the .core file must exist in the same directory. Useful when you already have FuseSoC cores checked out locally.

NameRequiredDescriptionDefault
pathYesAbsolute or relative path to the .core file

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description provides one behavioral constraint: HDL files must exist in same directory. However, it does not disclose side effects, idempotency, or what 'registry' entails.

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

Conciseness5/5

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

The description is concise: two sentences directly stating purpose, requirement, and use case. No unnecessary words.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description provides sufficient context: purpose, prerequisite (HDL files in same dir), and use case. Minor gap: no explanation of registry impact.

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 coverage is 100%, so description is not required to add much. It merely restates the parameter's purpose without further detail, maintaining baseline.

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 imports a local FuseSoC CAPI2 .core file into the registry, specifying the file format and local nature, distinguishing it from sibling like import_github_core.

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

Usage Guidelines4/5

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

The description includes 'Useful when you already have FuseSoC cores checked out locally,' implying when to use and distinguishing from remote imports, though it doesn't explicitly list alternatives.

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

import_github_coreA

Download an MIT-licensed GitHub repository and add it to the local IP core registry. Automatically uses FuseSoC CAPI2 metadata (.core file) if one exists in the repo. After import, the core is immediately available via get_ip_core and generate_ip.

NameRequiredDescriptionDefault
repoYesGitHub repo in 'owner/repo' format, e.g. 'ultraembedded/core_uart'
subdirNoSubdirectory within the repo to scope HDL search (for monorepos)
refNoBranch, tag, or commit SHA (default: repo's default branch)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it downloads repos, automatically uses FuseSoC CAPI2 metadata, adds to a local registry, and makes the core immediately available via other tools. It mentions the MIT license constraint and post-import availability, which are not obvious from the schema. However, it lacks details on error handling, rate limits, or authentication needs.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by implementation details and post-import effects. Every sentence adds value (e.g., MIT license, FuseSoC metadata, availability via other tools) with zero waste, making it efficient and well-structured.

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

Completeness4/5

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

Given the complexity (a tool that downloads, processes, and registers repos) and no annotations or output schema, the description is mostly complete. It covers the purpose, behavior, and outcomes, but lacks details on error cases (e.g., what happens if the repo isn't MIT-licensed or lacks a .core file) and doesn't describe the return value, which is a gap since there's no output schema.

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 the schema already documents all three parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain parameter interactions or default behaviors like 'ref' defaulting to the repo's branch). Baseline 3 is appropriate as the schema does the heavy lifting.

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 specific action ('Download an MIT-licensed GitHub repository and add it to the local IP core registry') and distinguishes it from siblings like 'import_fusesoc_core' (which likely imports from a different source) and 'search_github_cores' (which only searches). It explicitly mentions the verb+resource combination with the MIT license constraint.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (to import GitHub repos with MIT licenses and FuseSoC metadata) and implies an alternative ('import_fusesoc_core' for non-GitHub sources). However, it doesn't explicitly state when NOT to use it (e.g., for non-MIT repos or without .core files) or compare it to 'search_github_cores' for discovery vs. import.

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

lint_hdlA

Lint HDL source code using iverilog (Verilog/SystemVerilog) or ghdl (VHDL). Returns warnings and errors so you can fix them before synthesis.

NameRequiredDescriptionDefault
codeYesHDL source code to lint
languageNoHDL language variantverilog
top_moduleNoTop-level module name (optional)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool's function (linting), tools used (iverilog/ghdl), and output (warnings/errors), but lacks details on error handling, performance, or side effects. It doesn't contradict annotations, but could benefit from more behavioral context.

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

Conciseness5/5

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

The description is front-loaded and concise with two sentences that efficiently convey purpose, method, and outcome. Every sentence earns its place without redundancy, making it easy for an AI agent to parse quickly.

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

Completeness3/5

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

Given no annotations and no output schema, the description adequately covers the tool's purpose and basic behavior. However, for a tool with 3 parameters and no structured output information, it could be more complete by detailing output format or error cases, though it's sufficient for a linter tool.

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 the schema fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain 'top_module' usage or language-specific nuances). Baseline 3 is appropriate as the schema does the heavy lifting.

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's purpose with specific verbs ('lint HDL source code') and resources ('using iverilog or ghdl'), distinguishing it from siblings like format_hdl, simulate, or synthesize. It explicitly mentions the languages supported (Verilog/SystemVerilog/VHDL) and the outcome ('returns warnings and errors').

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('so you can fix them before synthesis'), implying it's a pre-synthesis step. However, it doesn't explicitly state when not to use it or name alternatives among siblings like get_diagnostics or simulate, which might offer overlapping functionality.

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

list_ip_coresA

List all available IP cores in the registry. Optionally filter by category.

NameRequiredDescriptionDefault
categoryNoFilter by category, e.g. 'communication' or 'memory'

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, description carries burden—but only states listing operation. Does not disclose return format, pagination, rate limits, or side effects. Adequate for a simple query, but could add context.

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

Conciseness5/5

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

Single sentence with no filler. Essential information is front-loaded. Every word earns its place.

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

Completeness4/5

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

Adequate for a simple list tool with no output schema and no annotations. Missing details like return format or empty-state behavior, but contextually complete enough given simplicity.

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 coverage is 100% with schema describing 'category' as filter. Description merely restates filtering without added detail. Baseline score of 3 applies.

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?

Clearly states verb (list), resource (IP cores in registry), and optional filtering by category. Distinct from siblings like get_ip_core or search_github_cores due to registry scope.

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?

Implies usage for listing all cores or filtered by category, but provides no explicit guidance on when to use this vs. alternatives like get_ip_core or search_github_cores. No exclusions mentioned.

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

litex_buildC

Run LiteX board target with --build. Returns logs and output directory.

NameRequiredDescriptionDefault
boardYesLiteX board target
argsNoExtra LiteX CLI args
output_dirNoOptional output directory
timeoutNoTimeout in seconds

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description must fully disclose behavior. It states it runs a build and returns logs and an output directory, but does not reveal side effects (e.g., file creation, duration), required permissions, or error handling. This is insufficient for a build 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 concise sentence, front-loading the core action. However, it may be overly minimal; slightly more detail could enhance clarity without losing conciseness.

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 (4 parameters, no output schema, no annotations), the description lacks completeness. It does not explain return format, timeout behavior, or effect of optional args. The tool's behavior is only partially described.

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?

All 4 parameters are described in the input schema (100% coverage). The tool description adds no further semantics beyond what the schema provides, so a baseline score of 3 is appropriate.

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 action (Run) and resource (LiteX board target) with the specific flag --build. It also mentions outputs (logs and output directory). While it doesn't explicitly distinguish from siblings like litex_flow or start_build, the purpose is specific and unambiguous.

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 guidance is provided on when to use this tool versus alternatives like litex_flow or start_build. There is no mention of prerequisites, context, or exclusions, leaving the agent without direction.

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

litex_flowA

Run a generic LiteX board target with caller-provided args.

NameRequiredDescriptionDefault
boardYesLiteX board target
argsNoExtra LiteX CLI args
timeoutNoTimeout in seconds

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavior. It does not mention if the tool is blocking, what side effects occur (e.g., writing to disk), permission requirements, or how output is handled. Minimal transparency beyond purpose.

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

Conciseness5/5

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

Single sentence, no redundancy. Every word adds meaning. Efficient for a generic tool.

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

Completeness4/5

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

Given 24 siblings and no output schema, the description is adequate for a simple runner but could mention typical use case (e.g., for prototyping or custom builds). Nearly complete.

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 coverage is 100%, so baseline is 3. The description adds 'caller-provided args' but does not explain how args interact with board target or provide examples. No extra semantic value beyond schema.

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?

Description clearly states it runs a generic LiteX board target with caller-provided args. The verb 'Run' and resource 'LiteX board target' are specific, and it distinguishes from siblings like litex_build and litex_soc by being generic.

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?

Description implies usage for running arbitrary board targets with extra args, but does not specify when to use this tool over siblings like litex_build or simulate. No explicit alternative or exclusion guidance.

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

litex_socA

Generate LiteX SoC without building gateware. Returns logs and output directory.

NameRequiredDescriptionDefault
boardYesLiteX board target
argsNoExtra LiteX CLI args
output_dirNoOptional output directory
timeoutNoTimeout in seconds

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that gateware is not built and that logs and output directory are returned, but lacks details on side effects, permissions, or constraints.

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

Conciseness5/5

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

Description is a single, front-loaded sentence that efficiently conveys the core action and return values. No wasted words.

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

Completeness3/5

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

For a tool with 4 parameters and no output schema, the description provides basic purpose and return type. However, it lacks context on prerequisites, file system effects, or error conditions, which would be helpful for 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 coverage is 100%, so parameters are already documented. The description adds no additional meaning beyond the schema; it does not explain how parameters like 'board' or 'args' affect generation.

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?

Description clearly states the tool generates a LiteX SoC without building gateware, distinguishing it from sibling tools like litex_build which actually builds gateware. The verb 'generate' and resource 'LiteX SoC' are specific.

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?

Description implies usage when you want to generate a SoC without building gateware, but does not explicitly state when to use or when not to use. No alternatives are mentioned, leaving the agent to infer from sibling names.

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

place_and_routeA

Synthesize Verilog with Yosys then place-and-route with nextpnr in one step. If backend=litex, runs LiteX build and ignores Verilog inputs. Returns max frequency, critical path, resource utilization, and full logs. Supported targets: ice40, ecp5, nexus, gowin. Common device/package values: ice40: device=hx1k|hx8k|up5k|lp1k package=tq144|qn84|sg48|cm81 ecp5: device=25k|45k|85k package=CABGA256|CABGA381 nexus: device=LIFCL-40-9BG400C (package embedded in device string) gowin: device=GW1N-UV4LQ144C6/I5 (package embedded in device string)

NameRequiredDescriptionDefault
codeYesVerilog source code
top_moduleYesTop-level module name
targetYesFPGA family
deviceYesDevice variant, e.g. 'hx1k', '25k', 'LIFCL-40-9BG400C'
packageNoPackage, e.g. 'tq144', 'CABGA256' (not needed for nexus/gowin)
constraintsNoOptional pin constraints (PCF/LPF/PDC/CST text)
timeoutNoPnR timeout in seconds
backendNoPnR backendyosys
litex_boardNoLiteX board target (required if backend=litex)
litex_argsNoExtra LiteX CLI args (backend=litex)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the two-step synthesis and place-and-route process, backend-specific handling (e.g., LiteX ignoring Verilog inputs), timeout parameter, and the return values (max frequency, critical path, etc.). It also lists supported targets and common device/package values, adding useful operational context.

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 well-structured and front-loaded with the core purpose, followed by backend details, return values, and target-specific notes. It is appropriately sized for a complex tool with 10 parameters, though the device/package list is somewhat lengthy but necessary for clarity.

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

Completeness4/5

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

Given the tool's complexity (10 parameters, no annotations, no output schema), the description does a good job of covering the workflow, backend options, return values, and target specifics. It could be more complete by detailing error handling or output format specifics, but it provides sufficient context for effective use.

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 the schema already documents all parameters thoroughly. The description adds some value by clarifying device/package examples and noting that package is 'not needed for nexus/gowin', but it does not significantly enhance parameter understanding beyond what the schema provides, meeting the baseline for high coverage.

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 explicitly states the tool's purpose: 'Synthesize Verilog with Yosys then place-and-route with nextpnr in one step.' It clearly distinguishes this from sibling tools like 'synthesize' (which only does synthesis) and 'litex_build' (which handles LiteX-specific flows), making the scope and differentiation evident.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool by mentioning the backend options ('yosys' vs 'litex') and noting that 'litex' ignores Verilog inputs. However, it does not explicitly state when to choose this over alternatives like 'synthesize' or 'litex_build', which would be needed for a perfect score.

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

search_github_coresA

Search GitHub for open-source MIT-licensed FPGA IP cores. Returns repo names, star counts, descriptions and topics. Use import_github_core to download a result into the local registry.

NameRequiredDescriptionDefault
queryYesSearch terms, e.g. 'uart verilog' or 'riscv softcore'
languageNoFilter by HDL language (optional)
max_resultsNoMaximum number of results to return

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the search scope (GitHub, MIT-licensed), return format, and relationship to import_github_core. However, it doesn't mention rate limits, authentication requirements, error conditions, or pagination behavior, which are important for a search tool.

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

Conciseness5/5

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

The description is perfectly concise with two sentences that each serve distinct purposes: the first defines the tool's function and output, the second provides usage guidance. There's zero wasted language or redundancy.

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

Completeness3/5

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

For a search tool with no annotations and no output schema, the description provides adequate basic information about purpose and usage. However, it lacks details about the search algorithm, result ordering, error handling, or authentication requirements that would be helpful given the tool's complexity and the absence of structured behavioral annotations.

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 the schema already documents all three parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. The baseline score of 3 is appropriate when the schema does the heavy lifting.

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 specific action ('Search GitHub'), target resource ('open-source MIT-licensed FPGA IP cores'), and return format ('repo names, star counts, descriptions and topics'). It distinguishes from sibling tools by mentioning import_github_core as a complementary action rather than an alternative search method.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (searching GitHub for FPGA IP cores) and mentions import_github_core as the next step for downloading results. However, it doesn't explicitly state when NOT to use it or compare it to potential alternatives like get_ip_core or list_ip_cores from the sibling list.

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

simulateA

Compile and simulate Verilog using Icarus Verilog (iverilog + vvp). Provide the design source and a separate testbench. Returns all $display/$monitor output and any runtime errors.

NameRequiredDescriptionDefault
codeYesVerilog design source
testbenchYesVerilog testbench source
timeoutNoTimeout in seconds

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it compiles and simulates, uses specific tools (iverilog + vvp), returns output from $display/$monitor and runtime errors, and implies a timeout via the parameter. However, it lacks details on permissions, rate limits, or error handling beyond runtime errors.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded, with two sentences that efficiently convey purpose, inputs, and outputs without wasted words. Every sentence adds necessary information, making it highly concise and well-structured.

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

Completeness3/5

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

Given the tool's complexity (simulation with compilation), no annotations, and no output schema, the description is adequate but has gaps. It covers the basic operation and outputs but lacks details on error types, output format, or prerequisites, which could be important for a simulation tool with multiple parameters.

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 the schema already documents all parameters. The description adds marginal value by mentioning 'design source' and 'testbench' which align with 'code' and 'testbench' parameters, but does not provide additional syntax, format details, or usage examples beyond what the schema provides.

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 specific action ('Compile and simulate Verilog') using specific tools ('Icarus Verilog (iverilog + vvp)'), distinguishes from siblings by focusing on simulation rather than formatting, linting, synthesis, or IP management, and explicitly mentions the required inputs ('design source and a separate testbench').

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (for Verilog simulation with Icarus Verilog) and implies usage by specifying the required inputs, but does not explicitly state when not to use it or name alternatives among the sibling tools (e.g., 'synthesize' or 'lint_hdl' for other tasks).

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

synthesizeB

Synthesize Verilog HDL using Yosys or run LiteX backend. Returns resource statistics and the list of inferred modules. Supported targets: generic, ice40, ecp5, gowin, xilinx, intel.

NameRequiredDescriptionDefault
codeYesVerilog source code
top_moduleYesName of the top-level module
targetNoFPGA family / synthesis targetgeneric
backendNoSynthesis backendyosys
litex_boardNoLiteX board target (required if backend=litex)
litex_argsNoExtra LiteX CLI args (backend=litex)
timeoutNoTimeout in seconds

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the return values ('resource statistics and the list of inferred modules') which is helpful, but doesn't describe important behavioral aspects like whether this is a read-only analysis or a destructive synthesis operation, potential side effects, execution time implications, or error handling. For a complex synthesis tool with 7 parameters, this is insufficient.

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 appropriately concise with two sentences that efficiently convey the core functionality and supported targets. The first sentence states the main purpose, and the second provides important context about outputs and targets. No wasted words, though it could be slightly more structured.

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?

For a complex synthesis tool with 7 parameters, no annotations, and no output schema, the description is incomplete. While it mentions return values, it doesn't adequately describe the tool's behavior, side effects, or how it differs from similar tools in the context. The agent would need to infer too much about this potentially complex operation.

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 schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema. It mentions 'Supported targets' which aligns with the 'target' parameter enum, but provides no additional context about target differences or selection criteria. Baseline 3 is appropriate when schema does the heavy lifting.

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 tool's purpose: 'Synthesize Verilog HDL using Yosys or run LiteX backend.' It specifies the action (synthesize/run backend), resource (Verilog HDL), and tools involved (Yosys/LiteX). However, it doesn't explicitly differentiate from sibling tools like 'litex_build' or 'place_and_route' which might have overlapping functionality.

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?

The description implies usage context by mentioning 'Supported targets' and the backend options, but doesn't provide explicit guidance on when to choose this tool versus alternatives like 'litex_build' or 'place_and_route'. It mentions what the tool does but not when it's the appropriate choice among siblings.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv0.1.0
    • First observedformat_hdl
    • First observedgenerate_ip
    • First observedget_diagnostics
    • First observedget_ip_core
    • First observedimport_fusesoc_core
    • First observedimport_github_core
    • First observedlint_hdl
    • First observedlist_ip_cores
    • First observedlitex_build
    • First observedlitex_flow
    • First observedlitex_soc
    • First observedplace_and_route
    • First observedsearch_github_cores
    • First observedsimulate
    • First observedsynthesize

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between lint_hdl and get_diagnostics, both focusing on HDL linting with different tools, which could cause confusion. Other tools like generate_ip and get_ip_core are clearly differentiated, and the LiteX tools (litex_build, litex_flow, litex_soc) have overlapping functionality but are described with enough detail to distinguish them.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun structures, such as format_hdl, generate_ip, and list_ip_cores. There are no deviations in naming conventions, making the set predictable and easy to parse for an agent.

Tool Count5/5

With 15 tools, the server is well-scoped for FPGA development tasks, covering code formatting, IP core management, linting, simulation, synthesis, and place-and-route. Each tool serves a specific purpose without redundancy, fitting the domain's complexity appropriately.

Completeness5/5

The tool set provides comprehensive coverage for FPGA workflows, including code preparation (format_hdl, lint_hdl), IP core handling (list_ip_cores, get_ip_core, generate_ip, import functions), simulation (simulate), synthesis (synthesize), and implementation (place_and_route). There are no obvious gaps, supporting end-to-end development from design to gateware.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Connects AI assistants to GitHub repositories, pull requests, issues, commits, and code search while enabling repository visibility controls, CI/CD monitoring, sandboxed local filesystem access, and code quality/security analysis.
    13
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to research topics, map and analyze codebases across 35+ languages, curate project context, and generate PRDs, user stories, task lists, and fullstack starter projects. It also supports multi-step workflow execution and AI-native task management through a CLI, interactive REPL, or MCP client integration.
    18 npm
    MIT

Appeared in Searches