Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SMT_MCP_Z3NoPath to the Z3 binary, overriding automatic resolution.
SMT_MCP_CVC5NoPath 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 declarations, premises, and conclusion. This server does NOT interpret English — it only runs the SMT-LIB you hand it. Pass the user's original wording in prose so the English and the formalization travel together in the evidence trail.

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 smtlib_script) and get their agreement that it captures what they meant. A verdict from this tool is a fact about the formalization, not directly about the user's English — whether the formalization is a faithful translation of their intent is the user's call, not yours.

Report exactly what the solvers returned. Do not upgrade "both solvers said unsat under these bounds" into an unqualified "yes, this is true" — an ENTAILMENT_HOLDS verdict is bounded-unsat relative to the premises and declarations as written, not an unbounded proof about the world. Read the caveats list and pass its contents along; each one names a specific way the guarantee is weaker than it may sound (quantifiers, nonlinear arithmetic, uninterpreted sorts, or a bounded check). If status comes back DISAGREEMENT, that is the headline: tell the user the two solvers returned different verdicts and that the result must not be trusted, do not average or pick one to report.

declarations are full SMT-LIB forms, e.g. (declare-const x Int) or (declare-fun key (String) String). premises and conclusion are bare boolean terms, e.g. (> x 5) — this tool wraps each premise in (assert ...) for you (a premise that already starts with (assert is accepted as-is, not double-wrapped).

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 declarations and constraints. This server does NOT interpret English — it only runs the SMT-LIB you hand it. Pass the user's original wording in prose so the English and the formalization travel together in the evidence trail.

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 smtlib_script) and get their agreement that it captures what they meant. A verdict from this tool is a fact about the formalization, not directly about the user's English.

Report exactly what the solvers returned. An UNSATISFIABLE verdict is bounded-unsat relative to the constraints and declarations as written, not an unbounded proof about the world — do not upgrade it into a stronger claim. Read the caveats list and pass its contents along (quantifiers, nonlinear arithmetic, uninterpreted sorts, or bounded checks each get their own caveat). If status comes back DISAGREEMENT, that is the headline: the two solvers returned different verdicts and the result must not be trusted.

declarations are full SMT-LIB forms, e.g. (declare-const x Int). constraints are bare boolean terms, e.g. (> x 5) — this tool wraps each in (assert ...) for you (a constraint that already starts with (assert is accepted as-is).

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 check_entailment / check_satisfiability's fixed shapes (declarations + premises/constraints + optional single conclusion) are not expressive enough — e.g. you need multiple (check-sat) calls, push/pop, or solver-specific tactics.

YOU (the calling model) build the entire script yourself, including (check-sat). This server does not interpret English and does not modify your script. As with the other tools: report exactly what came back, do not upgrade unsat under bounds into an unbounded claim, and treat a DISAGREEMENT between the two solvers as the headline finding, not a footnote.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues