Skip to main content
Glama
jgang724

construction-job-costing-agent

by jgang724
README.md
# Construction Job Costing Agent — MCP Server + MCP Apps

A proof-of-concept MCP (Model Context Protocol) server that provides construction job costing data and interactive visualizations for **Pacific Northwest Builders Inc.**, a fictitious general contractor.

## What This POC Proves

1. **MCP as a data backend for Copilot** — An MCP server can serve structured financial data (jobs, cost codes, change orders, cash flow) to M365 Copilot via SSE transport.
2. **MCP Apps for rich UI** — Tool responses include `ui://` resources with self-contained HTML views (SVG charts, interactive tables) that render inline in the Copilot panel.
3. **Domain-specific agent** — A declarative agent manifest gives Copilot the persona and instructions of a construction finance analyst.
4. **No external dependencies for charts** — All visualizations use inline SVG — no Chart.js, D3, or other libraries.

## Architecture

```
┌─────────────────────────────────────┐
│         M365 Copilot / Chat         │
│  (Declarative Agent: Job Cost       │
│   Analyst)                          │
└──────────────┬──────────────────────┘
               │ SSE (port 3001)
               ▼
┌─────────────────────────────────────┐
│        MCP Server (Node.js)         │
│  ┌───────────┐  ┌────────────────┐  │
│  │  tools.ts  │  │   data.ts     │  │
│  │  7 tools   │  │  6 jobs       │  │
│  │            │  │  cost codes   │  │
│  │  Handlers  │  │  change orders│  │
│  │  + UI refs │  │  cash flow    │  │
│  └───────────┘  └────────────────┘  │
│  ┌──────────────────────────────┐   │
│  │  views/ (HTML+SVG)           │   │
│  │  • job-dashboard.html        │   │
│  │  • cost-breakdown.html       │   │
│  │  • budget-vs-actual.html     │   │
│  │  • cashflow-forecast.html    │   │
│  │  • change-orders.html        │   │
│  └──────────────────────────────┘   │
└─────────────────────────────────────┘
```

## Setup

```bash
# Install dependencies
npm install

# Build TypeScript
npm run build

# Start the server
npm start
```

The server starts on **http://localhost:3001** with SSE endpoint at `/sse`.

## Tools

| Tool | Description | UI |
|------|-------------|-----|
| `query_jobs` | List all projects with summary stats | Dashboard with sparkline bars |
| `get_job_detail` | Full detail for one job (cost codes, subs, COs) | — |
| `get_cost_breakdown` | Cost by category (Labor/Materials/Equipment/Subs/Overhead) | Donut chart |
| `get_cost_code_detail` | Budget vs actual by CSI cost code | Horizontal bar chart |
| `compare_budget_vs_actual` | Cross-job budget vs actual comparison | Grouped bar chart |
| `get_cashflow_forecast` | Monthly planned vs actual vs forecast | Line chart |
| `get_change_orders` | Change orders with status filtering | Interactive table |

## Register as M365 Copilot Declarative Agent

1. Start the MCP server (`npm start`)
2. In the M365 Copilot admin or Teams Developer Portal, create a new declarative agent
3. Point it to the `declarative-agent.json` manifest in this directory
4. The manifest references `http://localhost:3001/sse` as the MCP server endpoint
5. For production, deploy the server and update the URL accordingly

## Testing in Copilot

Once registered, try these prompts:

- **"Show me a dashboard of all active projects"** → Job dashboard with cards and budget bars
- **"Which jobs are over budget?"** → Filtered list highlighting Cascade Office Tower
- **"Show the cost breakdown for the Downtown Transit Hub"** → Donut chart of cost categories
- **"What's the cash flow forecast for Cascade Office Tower?"** → Line chart with planned/actual/forecast
- **"List all pending change orders across projects"** → Interactive table filtered to Pending
- **"Compare budget vs actual for all projects"** → Grouped bar chart
- **"Give me the cost code detail for the bridge retrofit"** → Budget vs actual bars by CSI code

## Sample Data

The server includes realistic data for 6 construction projects totaling ~$113.6M in contract value:

| Project | Contract Value | Status | % Complete |
|---------|---------------|--------|------------|
| Cascade Office Tower | $12.5M | In Progress | 67% |
| Riverfront Mixed-Use Complex | $28.3M | In Progress | 35% |
| Highway 101 Bridge Retrofit | $8.7M | In Progress | 82% |
| Summit Ridge Condos Phase 2 | $15.1M | In Progress | 12% |
| Downtown Transit Hub | $45.2M | In Progress | 55% |
| Lakewood Elementary Renovation | $3.8M | In Progress | 95% |

12 change orders, 8 subcontractors, monthly cash flow data, and CSI-format cost codes per job.

## License

Internal proof-of-concept — not for production use.