Skip to main content
Glama

formal_prove

Proves SystemVerilog assertions embedded in RTL using SymbiYosys, supporting bounded or inductive verification and returning concrete outcomes like PROVEN or FAILED with counterexamples.

Instructions

Proves SystemVerilog assertions embedded in RTL with SymbiYosys (smtbmc+z3), bounded (bmc) or inductive (prove). Returns PROVEN, FAILED with counterexample asserts, UNKNOWN, ERROR, or TIMEOUT. Author properties first with rtl_generate_assertion (mcp-rtl-review); a passing lint does not mean properties hold.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cwdNoOptional working directory.
modeNoBounded check to depth (bmc) or full induction attempt (prove). Default: bmc.
depthNoBound depth in [1, 100] (default: 10). Deeper bounds cost solver time.
definesNoPreprocessor defines for the read step, e.g. ["FORMAL"] to enable `ifdef FORMAL assertion blocks (iverilog cannot parse SVA, so guard solver-only constructs).
timeout_msNoMaximum task time in milliseconds (default: 300000).
top_moduleYesTop module name.
keep_workdirNoKeep the SBY work directory for trace inspection (default: false).
verilog_sourcesYesRTL files containing the design and embedded assert properties.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.1.0

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well by listing return statuses (PROVEN, FAILED, UNKNOWN, ERROR, TIMEOUT) and the two proof modes. It does not detail side effects such as temporary workdir behavior, though the keep_workdir parameter partially covers that.

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 compact and well-structured, with no filler. Each sentence contributes essential information about behavior, outputs, or workflow.

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?

The description covers the core context: engine, modes, result kinds, and relationship to assertion authoring and linting. A small gap is the lack of explicit guidance on when to choose formal_prove over formal_lint_sva, though the lint caveat implies it.

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 the baseline applies. Each parameter already has a meaningful description, including defaults, constraints, and usage hints, so the description adds little beyond the 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?

The description clearly states the tool's purpose: proving SystemVerilog assertions in RTL using SymbiYosys with specific modes. It is easy to distinguish from the sibling lint and toolchain-info tools.

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

Usage Guidelines5/5

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

It explicitly explains bounded vs. inductive modes, directs users to author properties with rtl_generate_assertion, and cautions that lint success does not imply proof. This gives strong actionable guidance.

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

Install Server

Other Tools

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/zesun33/mcp-formal'

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