This Z3 constraint solver MCP server has a narrow, specialized domain (constraint satisfaction and relationship analysis) with 4 tools. Tool names are action-oriented (solve_*, analyze_*) which is good. However, the implementation has significant quality gaps: parameter descriptions are minimal or missing entirely, output schemas are undocumented, and error handling is absent. The server targets a sophisticated use case (formal logic and constraint solving) but the tool definitions themselves lack the clarity and structure that would help LLMs understand when and how to invoke them. Input schemas are present and mostly well-formed, but lack descriptions at the parameter level. This is a domain-expert tool that needs better scaffolding for agents.
Analyze relationships between entities using Z3. This tool takes a set of relationships between entities and a query about those relationships, and determines whether the query is implied by the given relationships.
A simpler interface for solving constraint problems. This tool provides a more straightforward interface for simple constraint problems, without requiring the full Problem model structure.
A simpler interface for analyzing relationships. This tool provides a more straightforward interface for relationship analysis, without requiring the full RelationshipQuery model structure.
Solve a constraint satisfaction problem using Z3. This tool takes a constraint satisfaction problem defined with variables and constraints, and returns a solution if one exists.
Parameter descriptions missing or minimal. The 'problem' parameter in solve_constraint_problem has a description ('The problem definition with variables and constraints') but nested properties (variables array items, constraint expression format) lack any guidance on expected format, constraints, or examples.
Output schemas are not documented. None of the 4 tools explicitly document what the response structure will be (success case, failure case, field names, types). LLMs cannot plan downstream steps or extract relevant data without knowing the return shape.
No error handling or recovery guidance. Constraint problems may be unsatisfiable, malformed, or timeout. Tools should document expected error cases and guide the LLM on what to do (simplify constraints, adjust bounds, try a different formulation). Currently no error messages or recovery paths are defined.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Tool descriptions lack context on WHEN to use each tool and WHY. Both solve_constraint_problem and simple_constraint_solver sound similar. The description says simple_constraint_solver is 'simpler' but doesn't explain the tradeoff or when to prefer one over the other. Same issue with analyze_relationships vs simple_relationship_analyzer.
Nested parameter documentation is absent. The 'variables' array contains objects with 'name' and 'type' fields, but there is no description of what valid 'type' enum values are (integer, real, boolean, string) or what they mean semantically. Same for 'constraints' array, no explanation of expression syntax, operator support, or format requirements.
Unclear parameter semantics in relationship tools. The 'value' field in Relationship objects is marked boolean but only shown in examples as true/false without explanation. What does value=true vs value=false mean in a relationship? Is it optional? When should it be set?