z3-solver-mcp-server
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., "@z3-solver-mcp-serverFind positive integers x and y such that 2x + 3y = 17."
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.
Z3 SMT Solver MCP Server
A Model Context Protocol (MCP) server that provides SMT (Satisfiability Modulo Theories) solving capabilities using the Z3 theorem prover. This server allows Claude and other MCP clients to solve complex constraint satisfaction problems, mathematical equations, logic puzzles, and optimization problems.
Features
SMT-LIB2 Support: Accepts problems in the standard SMT-LIB2 format
Z3 Integration: Powered by Microsoft's Z3 theorem prover
Mathematical Problem Solving: Handle algebra, logic, optimization, and constraint satisfaction
Simple Interface: Single tool with string input/output
Related MCP server: Logic-LM MCP Server
Installation
Prerequisites
Python 3.8 or higher
uv (recommended) or pip
Setup
Clone this repository:
git clone <repository-url>
cd z3-mcp-serverInstall dependencies:
uv syncOr with pip:
pip install z3-solver mcpMake the server executable:
chmod +x src/z3_mcp_server/main.pyUsage
With Claude Desktop
Add the server to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"z3-solver": {
"command": "uv",
"args": ["--directory", "/path/to/z3-mcp-server", "run", "main.py"],
"env": {}
}
}
}Example Problems
Once configured, you can ask Claude to solve various types of problems:
Age Problems:
"Joey is 20 years younger than Becky. In two years, Becky will be twice as old as Joey. How old are they?"
Algebra:
"Find integers x and y such that 2x + 3y = 17 and both are positive."
Logic Puzzles:
"Three people have ages 21, 22, and 23. Alice is not 21, and Bob is older than Alice. What are their ages?"
Optimization:
"A farmer has 100 feet of fencing. What rectangular dimensions maximize the enclosed area?"
Tool Reference
solve_smt_lib2
Solves constraint problems specified in SMT-LIB2 format.
Parameters:
problem(string): The constraint problem in SMT-LIB2 syntax
Returns:
String containing the solver result:
sat+ model if satisfiableunsatif no solution existsunknownif solver cannot determineError message if parsing fails
Example SMT-LIB2 Input:
(declare-const x Int)
(declare-const y Int)
(assert (= (+ x y) 10))
(assert (= (* x y) 21))
(check-sat)
(get-model)SMT-LIB2 Quick Reference
Basic Syntax
(declare-const name Type)- Declare a variable(assert condition)- Add a constraint(check-sat)- Check if constraints are satisfiable(get-model)- Get variable assignments (if sat)
Types
Int- IntegersReal- Real numbersBool- Boolean values
Operations
Arithmetic:
+,-,*,/,modComparison:
=,<,>,<=,>=Logic:
and,or,notSpecial:
distinct(all different)
Transport Support
Currently supports:
stdio: For use with Claude Desktop and similar local clients
Planned:
HTTP/WebSocket: For web-based integrations
Troubleshooting
Common Issues
Server not starting: Ensure Python and z3-solver are properly installed
Permission denied: Make sure the main.py file is executable
Import errors: Verify all dependencies are installed in the correct environment
Debug Mode
Run the server directly in the Inspector:
npx @modelcontextprotocol/inspector src/z3_mcp_server/main.py uv --directory /path/to/z3-mcp-server run main.pyContributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Add tests for new functionality
Submit a pull request
Available Tools
1 toolsolve_smt_lib2B
Solve the constraint problem provided in SMT-LIB2 format
| Name | Required | Description | Default |
|---|---|---|---|
| problem | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the entire burden. It only says 'Solve the constraint problem' without revealing side effects, return value, or any restrictions. The behavior of the solver (e.g., whether it returns sat/unsat, a model, or has limits) is completely unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that wastes no words. It is appropriately concise for a simple tool, though it omits potentially useful details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and only one sentence, the description leaves out critical context such as what the solver returns, any side effects, or error conditions. For a tool that processes user-supplied problems, this missing information limits a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero description coverage for the single parameter 'problem'. The description adds some meaning by referencing 'SMT-LIB2 format', but it does not explicitly define the parameter's type or expected syntax beyond that. This partially compensates for the schema gap but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Solve') and the resource ('constraint problem'), specifying the input format as SMT-LIB2. This is a specific, non-tautological purpose statement that distinguishes the tool from a generic solver, even without sibling tools listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a constraint problem is provided in SMT-LIB2 format, but it does not explicitly discuss when to use this tool versus alternatives or any prerequisites. Given no sibling tools exist, the implied context is acceptable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With only one tool, there is no possibility of confusion or overlap. The tool's purpose is singular and clear, so disambiguation is perfect.
The tool name 'solve_smt_lib2' follows a clear verb_noun pattern, indicating the action and the input format. Consistency is trivially high with a single tool.
The server has exactly one tool, which feels minimal for a solver domain. While it covers the core solve operation, a typical solver server might offer additional tools like model extraction or incremental assertions, making the count borderline.
The single tool accepts a full SMT-LIB2 script, which allows users to express a wide range of constraint problems including assertions, checks, and models. However, the lack of incremental interaction or separate utilities (e.g., parsing or model retrieval) is a minor gap.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Jailbreak-proof AI guardrails. Automated Reasoning SMT solver, not an LLM. ZK proofs included.
Precision math engine for AI agents. 203 exact methods. Zero hallucination.
Deterministic reasoning stack for AI agents: simulate, decide & compute, plus cross-domain tools.
Integrates Wolfram Language and Wolfram|Alpha accessing curated data and sophisticated algorithms.
Related MCP Servers
- AlicenseBqualityFmaintenanceA best-effort universal logic and numerical solver interface using MCP that implements the 'LLM sandwich' model to process queries, call dedicated solvers (ortools, cvxpy, z3), and verbalize results.765Apache 2.0
- AlicenseNot gradedqualityFmaintenanceProvides symbolic reasoning capabilities by converting natural language logical problems into Answer Set Programming (ASP) format and solving them using the Clingo solver. Enables users to perform formal logical reasoning, verify logical arguments, and get step-by-step explanations for complex logical problems.5MIT
- AlicenseAqualityCmaintenanceEnables solving complex combinatorial optimization problems with logical and numerical constraints through multiple solvers (Z3, CVXPY, HiGHS, OR-Tools). Specializes in portfolio optimization, scheduling, resource allocation, and constraint satisfaction problems.55Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables solving linear programming (LP) and mixed-integer linear programming (MILP) optimization problems through natural language, with built-in simplex and branch-and-cut solvers plus infeasibility diagnostics. Includes optional OR-Tools fallback for larger problems and supports parsing optimization problems from natural language descriptions.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/dsouflis/z3-solver-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server