Commercial MCP server for construction project management. Provides 44 tools for estimates, RFIs, change orders, daily logs, budgets, schedules, safety, subcontractors, and user management.
The server provides 50 tools across a comprehensive construction management domain. Strengths: consistent verb-noun naming, good description presence, visible parameter schemas with type constraints and enums. Weaknesses: many parameter descriptions are terse or generic (10-20 chars, not meeting the 'actionable' bar); output schemas are not explicitly documented in source code; error handling guidance is minimal; no evidence of tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite declared Risk levels; composition is reasonable but some tools could be split (e.g., generate_estimate_report and compare_estimates combine report generation with analysis). Average parameter description length appears ~40-60 chars, below the 72-char baseline for A+ tools. Tool definitions are visible and properly registered via server.tool(), so no inference penalty applies.
Approve a pending change order. Updates budget lines with approved changes. Requires admin scope.
Calculate schedule float for tasks
Analyze the critical path and identify schedule-critical tasks
Compare bids from multiple subcontractors
Compare multiple estimates side-by-side
Create a change order
Create a daily site log
Output schemas not explicitly documented in source. No visible return type annotations or response structure definitions for any tool. LLMs cannot predict what fields to extract from responses, forcing them to infer structure or make wasteful downstream lookup calls.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | <=2025-11-25 | v2 |
Create a construction cost estimate
Create a lien waiver document
Create a new construction project
Create a Request for Information
Create a new user account
AI-assisted: Draft an RFI response using project context and spec references
AI-assisted: Evaluate cost and schedule impact of a proposed change order
Identify budget line items exceeding approved amounts
Identify tasks that are behind schedule
AI-assisted: Forecast final project cost based on current spending trends
Generates AIA G702/G703 payment application data matching form fields
Generate a professional estimate report
AI-assisted: Generate a subcontractor performance scorecard
AI-assisted: Safety toolbox talk tailored to project conditions, recent incidents, and active trades
Generate a weekly site report
Get budget details for a specific cost code
Get the change order history for a project
Get a specific daily log
Get estimate details including line items
Get organization settings
Get OSHA compliance status and incident history
Get details for a specific project
Get comprehensive project dashboard with budget, schedule, and performance data
Get details for a specific RFI
Get project schedule and task details
Get subcontractor performance metrics
Get submittal status and tracking
Import cost data from external sources
List all projects in the organization
List all RFIs for a project
List subcontractors for a project
List users in the organization
Log a safety incident
Remove a user from the organization
Submit a response to an RFI
Search project documents and specifications
AI-assisted: Summarize daily logs into a narrative
Track worker certifications and compliance
Track committed costs (change orders, RFIs, pending approvals)
Update a line item in an estimate
Update organization settings
Update project details
Update a user's role and permissions
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) not present despite declared Risk levels (READ_ONLY, WRITE, DESTRUCTIVE). These annotations help LLMs make safer decisions about tool selection, retry logic, and composition. All 50 tools should carry the appropriate annotation.
Parameter descriptions are terse (10-40 chars for many). Examples: 'Create a new construction project' (32 chars), 'Get details for a specific project' (34 chars). Production baseline is 72 chars average. Descriptions should include context about when/why to use the tool and any prerequisites or dependencies.
Error handling lacks recovery guidance. Source code shows errorContent() helper returning basic JSON error objects, but no guidance on next steps, retryability, or user-fixable conditions. Example: a not-found error should suggest 'Call list_projects() to see available projects.'
Many tools accept open-form string or numeric inputs without documented constraints. Examples: project_id, cost_code, cost_amount fields lack min/max, pattern, or enum definitions in visible descriptions. This invites LLM hallucination of invalid values.
Some tools combine multiple responsibilities. approve_change_order both approves and updates budget lines in one call; generate_estimate_report and compare_estimates both generate and analyze. Consider splitting into separate tools (approve_change_order + apply_change_to_budget) to allow agent composition.
No evidence of pagination support in list_* tools. list_projects, list_rfis, list_users, list_subcontractors lack visible offset/limit/cursor parameters and total_count fields in output. Large result sets will blow context window.
Tool descriptions do not distinguish between similar tools. Examples: draft_rfi_response vs respond_to_rfi (draft vs submit), summarize_daily_logs vs generate_weekly_report. LLMs may conflate these without explicit guidance on when to call each one.