efinity-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EFINITY_HOME | No | Path to the Efinity installation directory. If not set, the server searches for the newest version in default locations (C:\Efinity\ on Windows, ~/efinity/ or /opt/efinity/ on Linux). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_efinity_infoA | Show the Efinity install this server uses: path, version, user settings folder, recent projects. |
| list_projectsA | List Efinity projects: the GUI's recent projects plus projects found under the default
project folder (or |
| get_project_infoB | Read a project's settings: device, top module, design/constraint/interface files and synthesis, place-and-route, and bitstream options. |
| create_projectA | Create a new Efinity project .xml. family: Trion | Titanium | Topaz. device: e.g. Ti375N1156, Ti60F225, T20F256.
timing_model: speed grade such as C4, C3, I4. design_files and sdc_files may be absolute or
relative to |
| update_projectA | Edit a project .xml: add or remove HDL files and SDC files, change the top module or the device. A .xml.bak backup is written first. |
| run_flowA | Run the Efinity flow with efx_run. compile = full RTL-to-bitstream (synthesis, debug core, interface, place & route, bitstream).
The other flows run one stage and expect the earlier stages to be up to date.
Waits up to |
| get_job_statusA | Status of a background job (flow run or programming). Optionally wait up to wait_seconds for it to finish. Shows stage results and the last console lines. |
| list_jobsA | List the jobs started in this server session, newest first. |
| cancel_jobA | Stop a running job and its child processes. |
| get_build_statusB | Summarise the latest build: which outputs exist and when they were made, whether sources changed since the bitstream was built, resource usage, final timing, and error/warning counts. |
| get_timing_summaryA | Post-route timing: constrained vs achievable clock frequencies, setup/hold slack per clock pair, worst slack, and whether timing is met (from .timing.rpt). |
| get_timing_pathsA | Worst critical paths from the timing report, sorted by slack. clock_filter keeps paths whose 'launch vs capture' clock pair contains the text. include_detail adds the full cell/net breakdown of each path. For custom queries (-from/-to/-through), use run_sta_tcl. |
| get_utilizationA | Resource usage: core (XLRs, memory, DSP, I/O, clocks) and periphery after place & route, plus synthesis estimates. hierarchy=True adds a per-module breakdown (values are total(self)). |
| get_messagesA | Errors and warnings from the latest run of each stage (synthesis, debug core, place,
route, bitstream), most severe first. |
| get_io_assignmentsA | Package pin assignments of user signals (pin, bank, voltage, I/O standard, pull) from the Interface Designer pinout. include_core_interface adds the core<->periphery signal list. |
| list_reportsA | List the report and log files in the project's outflow folder. |
| read_reportA | Read any report or log, e.g. 'timing.rpt', 'pt.rpt', 'map.rpt', 'route.out', 'EFX.warn.log' (the project-name prefix is optional). section: title or number of a report section (see the 'sections' list returned when omitted). pattern: regex; returns only matching lines with context_lines around them. offset/max_lines: page through long files. |
| run_sta_tclA | Run Tcl in Efinity's static timing analyzer on the routed design (efx_run sta_tclsh). Supports SDC-style commands: report_timing (-from/-to/-through/-from_clock/-to_clock/-npaths/ -setup/-hold/-detail), report_timing_summary, report_clocks, report_cdc, check_timing, get_cells/get_nets/get_pins/get_ports/get_clocks, all_registers, create_clock, set_false_path, and more. Run 'help' or ' -help' for usage. Constraints set here only apply to this session; they are not saved to the project. |
| get_interface_designA | Overview of the project's Interface Designer (.peri.xml) design: every GPIO (mode, I/O standard, resource, package pin, bank), every other block (PLL, OSC, LVDS, MIPI, DDR, JTAG, PMA_DIRECT, ...) with its resource and key settings, and the I/O bank voltages. block_types limits the listing (e.g. ["GPIO"] or ["PLL"]). include_check also runs the Interface Designer design check. Reads the saved file, so it reflects the GUI only after the GUI saves. |
| get_interface_blockA | All properties of one Interface Designer instance (GPIO, GPIO bus, PLL, LVDS_TX, ...) with the allowed values for each: choice lists, 'min:max' ranges, or free-form. Use it before edit_interface to get exact property names. For PLLs it adds the calculated VCO/output frequencies and the reference clock source. |
| list_device_resourcesA | Physical resources on the project's device that Interface Designer blocks can be placed on. GPIO: each resource with its package pin, I/O bank, features (e.g. HSIO, DDIO), alternate function (e.g. GCLK, PLL_CLKIN) and current user. Filter by bank ('4B'), or by feature or alternate function text ('PLL_CLKIN', 'HSIO'). Other block types (PLL, LVDS_TX, OSC, ...): the resource names and whether each is used. free_only=False includes used resources. |
| check_interfaceA | Run the Interface Designer design check (DRC) on the saved design: unplaced pins, I/O standard vs bank voltage mismatches, PLL frequency ranges, clock routing rules, and so on. |
| calc_pllA | PLL calculator. With no targets, reports the PLL's current VCO/PLL/output frequencies. With targets such as {"CLKOUT0_FREQ": 200, "CLKOUT1_FREQ": 50, "CLKOUT1_PHASE": 90}, returns counter/divider solutions (M, N, O, per-output dividers) without changing anything. Apply one with edit_interface op auto_calc_pll. Only enabled outputs (CLKOUTn_EN=1) can be solved. |
| edit_interfaceA | Change the Interface Designer design (.peri.xml). Operations run in order; if any fails, nothing is saved. After the operations the design check runs, and the file is saved only if no new design-check errors appeared (allow_new_errors=True saves anyway). dry_run=True applies and checks without saving. A .peri.xml.bak backup is written before saving. If the project has no .peri.xml yet, one is created for the project's device. Values are validated against the allowed values (see get_interface_block); I/O standards may be written as '3.3 V LVCMOS' or '3.3_V_LVCMOS'. Operations (each is an object with "op"): {"op": "create_gpio", "name": "led", "mode": "output", "pin": "U4", "properties": {"IO_STANDARD": "1.8 V LVCMOS"}} mode: input | output | inout | open_drain_output | clock_input | regional_clock_input | pll_clock_input | pll_ext_feedback | mipi_clock_input | pcie_perstn | clockout | global_control | vref | unused. A bus: add "msb": 7, "lsb": 0 (input/output/inout); buses can't take "pin", so place members with assign_pin on "led[0]" etc. "resource" (e.g. "GPIOB_P_31") can be given instead of "pin". {"op": "create_block", "name": "pll0", "type": "PLL", "resource": "PLL_TL0", "properties": {...}} type: any of block_types_supported from get_interface_design (PLL, OSC, LVDS_TX, LVDS_RX, MIPI_DPHY_RX, DDR, JTAG, PMA_DIRECT, ...). Optional "params" are passed to the API's create_block (tx_mode / rx_conn_type for LVDS, mode / conn_type for MIPI lanes). {"op": "set_properties", "name": "led", "properties": {"PULL_OPTION": "WEAK_PULLUP", "DRIVE_STRENGTH": "8"}} On a bus name, sets every member. Add "type" if a name is ambiguous. {"op": "assign_pin", "name": "led", "pin": "U4"} (GPIO package ball) {"op": "assign_resource", "name": "pll0", "resource": "PLL_TR1"} Both refuse a resource already used by another instance unless "override": true. {"op": "delete", "name": "old_sig"} {"op": "set_bank_voltage", "bank": "4B", "voltage": "1.8"} {"op": "auto_calc_pll", "name": "pll0", "targets": {"CLKOUT0_FREQ": 200, "CLKOUT1_FREQ": 100}} Solves and applies M/N/O and dividers. Enable the outputs first (CLKOUTn_EN=1, CLKOUTn_PIN). PLL output frequencies are read-only properties; this is how they are set. {"op": "gen_pll_ref_clock", "name": "pll0", "refclk_name": "pll_refclk", "pll_res": "PLL_TL0"} Creates the reference-clock GPIO on the pin that feeds that PLL. {"op": "set_unused_gpio_state", "state": "INPUT_WITH_WEAK_PULLUP"} {"op": "import_isf", "file": "C:/path/settings.isf"} (Interface Scripting File) After saving, run_flow(compile) rebuilds with the new interface. If the project is open in the Efinity GUI, close it or reload it there, or the GUI may save its old copy over these changes. |
| export_interface_isfA | Export Interface Designer settings to an Interface Scripting File (.isf, Python commands that recreate the blocks). Useful as a readable backup, for diffs, or to copy settings to another project (import with edit_interface op import_isf). Defaults to _export.isf in the project folder; block_types / instances limit what is exported. |
| list_programmer_cablesA | Detect connected Efinix programming cables / dev boards (FTDI) and the FPGAs on their JTAG chain. |
| program_deviceA | Program an Efinix FPGA through the Efinity command-line programmer. mode:
jtag / jtag_chain - load a .bit into the FPGA's SRAM over JTAG (lost at power-off)
active / passive - write a .hex to SPI configuration flash (or SPI passive load)
jtag_bridge(_x8) - write a .hex to configuration flash through the FPGA's JTAG bridge
Flash modes overwrite what the board boots from, so confirm with the user first.
Give either |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 27 tools
Tool purposes are mostly distinct, and the descriptions clearly separate enumerations from details, reports from actions, and summary views from specialized queries. The main overlap risk is between get_build_status and the specialized timing/utilization/messages tools, and between get_interface_design's optional check and check_interface, but these are not severe.
All tools use lowercase snake_case with a consistent verb-first pattern: list_* for enumerations, get_* for entities and status, create_/update_ for project mutations, and run_/check_/calc_/export_/program_ for actions. There are no camelCase or mixed-convention names.
27 tools is on the heavier side, but the server covers a broad FPGA lifecycle: project management, interface design, build flow, timing analysis, reporting, and programming. Each tool has a defined role, and while a few reporting tools could be consolidated, the count is defensible for the domain.
The lifecycle is well covered: project create/update/read, Interface Designer editing/checking/export, flow execution and job monitoring, timing and STA analysis, report access, and device programming. Minor gaps such as no project deletion or direct SDC editing are workable and do not create dead ends.