smt-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SMT_MCP_Z3 | No | Path to the Z3 binary, overriding automatic resolution. | |
| SMT_MCP_CVC5 | No | Path to the cvc5 binary, overriding automatic resolution. |
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 |
|---|---|
| check_entailmentA | Check whether a conclusion is logically entailed by a set of premises, by asking whether (premises AND NOT conclusion) is unsatisfiable, cross-checked in both Z3 and cvc5. YOU (the calling model) are responsible for translating the user's prose
question into Before presenting the verdict to the user as an answer about their original
English question, SHOW THEM THE FORMALIZATION (the declarations, premises,
and conclusion, or the assembled Report exactly what the solvers returned. Do not upgrade "both solvers said
unsat under these bounds" into an unqualified "yes, this is true" — an
Worked example (propositional modus ponens): declarations = ["(declare-const p Bool)", "(declare-const q Bool)"] premises = ["(=> p q)", "p"] conclusion = "q" -> entailment holds (both solvers report the negated-conclusion script is unsatisfiable). |
| check_satisfiabilityA | Check whether a set of constraints is jointly satisfiable, cross-checked in both Z3 and cvc5. YOU (the calling model) are responsible for translating the user's prose
question into Before presenting the verdict to the user as an answer about their original
English question, SHOW THEM THE FORMALIZATION (the declarations and
constraints, or the assembled Report exactly what the solvers returned. An
Example: declarations = ["(declare-const x Int)"] constraints = ["(> x 5)", "(< x 8)"] -> satisfiable (both solvers find a witness, e.g. x = 6). |
| run_smtlibA | Run a fully-assembled SMT-LIB v2 script verbatim, cross-checked in both Z3
and cvc5. Use this when YOU (the calling model) build the entire script yourself, including
|
| solver_infoA | Report which Z3 and cvc5 binaries this server resolved (path, whether the binary was found, and its reported version string). Useful for confirming the environment before trusting any verdict from this server, and for attaching solver versions to an audit trail. |
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 4 tools
Each tool has a clearly distinct role: check_entailment tests logical consequence, check_satisfiability tests joint consistency, run_smtlib is an explicit escape hatch for arbitrary scripts, and solver_info reports environment info. The descriptions even explain when to prefer run_smtlib over the fixed-shape tools, eliminating the main potential overlap.
check_entailment, check_satisfiability, and run_smtlib follow a consistent verb_noun pattern, and solver_info is a readable noun form. The one deviation (solver_info lacking a verb) is minor and idiomatic.
Four tools is well-scoped for a focused SMT solver wrapper: two fixed-shape query forms, one general script runner, and one environment-inspection tool. Each earns its place with no redundancy or thin coverage.
The surface covers the core SMT workflow (entailment, satisfiability, raw scripts, solver version info). Minor gaps exist for dedicated model/witness retrieval and unsat-core or optimization queries, though run_smtlib can partially work around these.