Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-quintrun a simulation of bank.qnt to check the no_negatives invariant"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-quint
MCP server for the Quint formal specification language. Wraps the Quint CLI to make formal verification accessible to any LLM-powered workflow.
Quick Start
1. Install Quint CLI
npm i -g @informalsystems/quint2. Add to Claude Code
claude mcp add quint -- npx @dpdanpittman/mcp-server-quintThat's it. You now have 6 formal verification tools available in Claude Code.
Other MCP Clients
Any MCP-compatible client can use this server over stdio:
npx @dpdanpittman/mcp-server-quintWith Supergateway (HTTP transport)
{ name: 'quint', command: 'node', args: ['/path/to/mcp-server-quint/index.js'] }Tools
quint_typecheck
Type-check a Quint specification. Provide either source (inline .qnt code) or file_path.
quint_run
Simulate a Quint spec with random execution. Optionally check an invariant. Returns a counterexample trace if violated.
Parameter | Description |
| Spec to simulate |
| Init action name (default: "init") |
| Step action name (default: "step") |
| Invariant to check |
| Number of runs (default: 10000) |
| Steps per run (default: 20) |
| Random seed for reproducibility |
quint_test
Run named test definitions (run statements). Optionally filter by match regex.
quint_verify
Exhaustive model checking via Apalache. Checks ALL reachable states, not just random samples. Requires Java 17+ and Apalache.
quint_parse
Parse a spec and return the intermediate representation (IR) as JSON.
quint_docs
Quick reference for Quint syntax. Topics: sets, maps, lists, actions, temporal, types, modules, testing, or all.
Example
module bank {
var balances: str -> int
val ADDRS = Set("alice", "bob")
action init = balances' = ADDRS.mapBy(_ => 100)
action transfer(sender: str, receiver: str, amt: int): bool = all {
balances.get(sender) >= amt,
balances' = balances.set(sender, balances.get(sender) - amt)
.set(receiver, balances.get(receiver) + amt)
}
action step = {
nondet sender = ADDRS.oneOf()
nondet receiver = ADDRS.oneOf()
nondet amt = 1.to(balances.get(sender)).oneOf()
transfer(sender, receiver, amt)
}
val no_negatives = ADDRS.forall(a => balances.get(a) >= 0)
}Environment Variables
Variable | Default | Description |
|
| Path to Quint CLI binary |
|
| CLI timeout in ms |
License
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.