MCP server for constraint-based site layout optimization of wastewater/biogas facilities
Server has 6 tools with explicit Pydantic schemas and descriptions. Strengths: clear naming (verb_noun pattern), detailed parameter constraints, and structured responses. Weaknesses: some parameter descriptions are generic, output schemas not fully documented in tool definitions, error handling guidance missing, and tool compositions could be better optimized for agent chaining. Average per-tool score: 62.
Export a solution to various formats (GeoJSON, SVG, DXF, PDF).
Generate site layout solutions for wastewater/biogas facilities. Creates multiple diverse placement solutions using constraint programming (OR-Tools CP-SAT) with Shapely geometry validation and A* road routing.
Get full details of a solution by ID.
List all layers in a GIS file.
Load site data from a GIS file (Shapefile, GeoJSON, GeoPackage, etc.).
List solutions from a job with pagination.
Output schemas not documented in tool definitions. Response structures are inferred from Pydantic models (SiteFitResponse, GISLoadResponse) but not explicitly declared in tool registration. LLMs cannot see what fields to expect from each tool.
Error handling lacks recovery guidance. No error responses document what the LLM should do on failure (e.g., 'User not found. Try search_users() first.'). Tool definitions do not specify error cases or retryability.
Brief descriptions on discovery tools (sitefit_list_solutions, sitefit_gis_list_layers, sitefit_get_solution). Under 30 chars each. LLMs need context on when to call them vs alternatives. E.g., 'List solutions from a job with pagination' doesn't explain: Is this the first call? What does compact vs full detail return?
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No explicit enums for format parameter in sitefit_export_solution. Description lists 'geojson, svg, dxf, pdf, spatial_contract' as text, not as a constrained enum. LLMs may hallucinate other formats.
Tool composition gap: sitefit_generate returns solutions with job_id and solution_id. To retrieve a solution later, user must call sitefit_get_solution(job_id, solution_id). No indication which to call first or in what order. Agents need explicit chaining hints.
sitefit_gis_load has auto_detect=True default. If True, boundary_layer and entrance_layer can be None. Behavior when auto-detect fails is not documented, does it return partial results, error, or empty data?
Irreversible operations (sitefit_generate spawns a solve job; sitefit_export_solution writes files) lack dry-run or confirmation steps. No indication if operations are retryable or idempotent.