Skip to main content
Glama
zeqikong-ctrl

quote-mcp-server

🏗️ decoration-quote-engine

装修硬装报价引擎 · 已落地生产验证:DXF 墙线拓扑重建 → 工程量提取 → 确定性报价 → HTTP / MCP 服务

Python ezdxf shapely FastAPI MCP Docker

配套智能体项目:interior-ai-agent(LangGraph 编排层,经 MCP 调用本引擎与软装目录) 软装单价目录(独立仓库):soft-mcp-server


✨ 它解决什么问题

装修报价长期依赖人工量房 + Excel 套价,存在三个痛点:

  1. 慢且不可复现 —— 同一张户型图,不同设计师出价差异大,客户难以比价。

  2. 黑盒 —— 客户看不到「面积怎么来、单价怎么定」,信任成本高。

  3. LLM 幻觉 —— 直接让大模型算钱,金额随温度波动、无法审计。

本引擎用确定性代码替代人工套价:几何算量 + 规则报价全部可复现、可审计,仅在「风格识别」「置信度不足」等少数卡点引入人工确认(HITL)。

Related MCP server: tero-mcp-lite

📦 它做什么(真实案例 · 南京·新块1)

输入一张量房后的原始墙体图(DWG→DXF,无任何闭合房间线),输出可直接给客户看的硬装 + 软装报价:

新块1.dxf(套内 60.48㎡,两室两厅)
  → 墙线 topo 重建,自动围合 7 个房间 + 干湿区分类
     餐厅/主卧/客厅/次卧=dry,厨房/卫生间/阳台独立分区
  → 门 5 / 窗 5 / 垭口 1 自动识别
  → 硬装报价 标准档 ¥94,806.79(70 项明细)
  → 软装预算 奶油风格 标准档 ¥109,100
  → 客户整装预算 ≈ ¥203,907(硬装 + 软装)

全程零 LLM 调用——算量与算钱都是确定性代码,同一输入永远得到同一输出。

🧱 架构(四层)

┌─────────────────────────────────────────────────────────────┐
│  编排层  interior-ai-agent (LangGraph)                       │
│  intent 解析 / 多轮改价 / HITL 人工确认 / 案例图检索          │
└───────────────┬───────────────────────────┬─────────────────┘
                │ MCP stdio                  │ MCP stdio
                ▼                             ▼
┌───────────────────────────┐   ┌─────────────────────────────┐
│  硬装引擎 (本仓库)         │   │  软装目录 soft-mcp-server     │
│  parse_dxf                │   │  soft_catalog                │
│  compute_quote            │   │  compute_soft_budget         │
│  generate_report          │   └─────────────────────────────┘
└───────────────┬───────────┘
                │ 内部 importlib 加载 soft_prices.py
                ▼
┌───────────────────────────┐
│  A 层  src/service.py      │  FastAPI:/quote /soft /health /reports
│  + Docker / docker-compose │  可被任意前端 / 系统直接 HTTP 调用
└───────────────────────────┘

🧠 核心设计

1. 墙线拓扑重建(src/agents/hard/takeoff.py)

原始墙体图往往没有闭合的房间多段线。本引擎用 shapely.polygonize + networkx 从纯墙线段自动围合房间,再按文字标注 / 面积启发式判定房间功能(厨房 / 卫生间 / 阳台), 输出带置信度的工程量 JSON:

  • ROOM 图层闭合多段线优先(confidence 0.90)

  • 无 ROOM 图层时走 wall_polygonize 墙线围合(confidence 0.75)

  • confidence < 0.70 触发人工核对(HITL)

2. 规则报价引擎(src/agents/hard/cost.py)

单价表按 zone(dry/wet/kitchen/balcony/all)× basis(计量依据)驱动,内置一线业务规则:

规则

说明

门按套计

木门 1298 元/套;门套按 2×高+宽 算延米,入户门单边、垭口双边

瓷砖品牌统一

同空间墙/地砖自动选同一品牌(两种品牌有 200 元小单费)

地面材质分支

铺瓷砖→含铺贴人工、免地垫宝;铺地板→需地垫宝找平、踢脚线赠送

水电分档

1室1厅≤60平 8500;2室以上≤75平 10000;>75平按建筑面积×140(建面=套内/0.75)

石膏板平顶

只算衣柜柜头:投影面积×(柜深/柜高),非全屋满吊

橱柜/定制柜估算

按套内面积-户型对照表自动估延米/投影面积,可用实测值覆盖

提问点机制

层高、卧室瓷砖还是地板、下沉找平——计算前必须确认

3. 档次分档(tier)—— 激活「预算调高 / 调低」

单价表(config/unit_price_nanjing_mq.csv)每行带 tier 列:最简 / 标准 / 轻奢 / 通用(不分档)。

  • 标准 为锚点(即原南京美全价目表基线);最简 / 轻奢 缺项时自动回退到 标准,保证任何档位都能算全。

  • 分档价差覆盖:木门、强化地板、瓷砖(300/800 系列)、钛合金门、集成吊顶、开关插座、定制柜等主材。

  • 语义归一:低档/经济→最简,中档/性价比→标准,高档/豪华→轻奢。

  • 同一套工程量下,三档真实金额(新块1):最简 ¥83,735 / 标准 ¥94,807 / 轻奢 ¥107,596

4. MCP Server(src/mcp_server/server.py)

引擎以 MCP stdio 协议对外暴露 3 个工具,可被 LangGraph Agent、Claude Desktop、Cursor 等任意 MCP Host 调用:

Tool

输入 → 输出

parse_dxf

DXF 路径 → 工程量 JSON + confidence + 房间摘要

compute_quote

takeoff JSON + ProjectConfig(层高/地面材质/品牌偏好/tier)→ 报价 JSON

generate_report

报价 JSON → 打印友好 HTML

5. A 层 HTTP 服务(src/service.py)

FastAPI 把引擎封装成 HTTP 接口,软装目录经 importlib 按路径加载(规避双 src 包命名冲突), 输出自动落盘到 output/,HTML 报价单通过 /reports 静态挂载直接预览。

📁 项目结构

decoration-quote-engine/
├── src/
│   ├── core/                     # 数据模型 / DXF IO / 几何工具 / 配置
│   │   ├── models.py             # Takeoff / HardQuote / ProjectState
│   │   ├── dxf_io.py
│   │   ├── geometry.py
│   │   └── config/               # 单价表加载
│   ├── agents/hard/
│   │   ├── takeoff.py            # DXF 解析 + 墙线拓扑重建 + 工程量提取
│   │   ├── cost.py               # 规则报价引擎(ProjectConfig + zone/basis 匹配)
│   │   └── quote_report.py       # 报价 JSON → HTML
│   ├── mcp_server/server.py      # quote-mcp-server(FastMCP stdio)
│   └── service.py                # A 层 FastAPI:/quote /soft /health /reports
├── config/
│   └── unit_price_template.csv   # 单价表格式模板(真实价目表不入库)
├── output/                       # 运行产物(takeoff/quote/报价单 JSON+HTML)
├── tests/                        # pytest(takeoff 回归 + MCP 全链路冒烟)
├── Dockerfile                    # python:3.13-slim
├── docker-compose.yml            # 挂载 soft-mcp-server,端口 8000
├── .dockerignore
├── requirements.txt              # fastapi / uvicorn / ezdxf / shapely / networkx
├── docs/
│   ├── deploy.md                 # 部署与端点说明
│   └── case_study.md             # 落地复盘(真实数据)
└── 装修报价智能体_技术方案文档.md

🚀 快速开始

A. CLI 跑通整条链路

pip install -r requirements.txt

# 1) DXF → 工程量
python -m src.agents.hard.takeoff path/to/户型.dxf output/takeoff.json

# 2) 工程量 → 硬装报价(需按 config/unit_price_template.csv 准备单价表)
python -m src.agents.hard.cost output/takeoff.json config/你的单价表.csv output/quote.json

# 2b) 带档次:--tier 最简/标准/轻奢
python -m src.agents.hard.cost output/takeoff.json --tier 轻奢 output/quote_lux.json

# 3) 报价 → HTML 报价单
python src/agents.hard/quote_report.py output/quote.json output/quote.html

# 直接起 MCP Server(stdio)
quote-mcp-server

# 测试
pytest tests/ -q

B. HTTP 服务(A 层)

# 设置软装目录仓库路径(docker-compose 通过 SOFT_REPO_PATH 注入)
export SOFT_REPO_PATH=/path/to/soft-mcp-server

uvicorn src.service:app --host 0.0.0.0 --port 8000

端点

方法

说明

/health

GET

健康检查

/quote

POST

multipart/form-data:dxf 文件 + style/tier/floor_height/city,返回硬装报价 JSON + report_url

/soft

POST

JSON:{style, tier, rooms?},返回软装预算 JSON

/reports/*

GET

已生成的 HTML 报价单(静态目录)

# 调硬装报价
curl -F "dxf=@新块1.dxf" -F "style=奶油" -F "tier=标准" http://localhost:8000/quote

# 调软装预算
curl -X POST http://localhost:8000/soft -H "Content-Type: application/json" \
  -d '{"style":"奶油","tier":"标准"}'

C. Docker 部署

# 在 docker-compose.yml 中设置 SOFT_REPO_PATH 指向本地 soft-mcp-server
docker compose up --build
# → http://localhost:8000/health

详见 docs/deploy.md

🧾 真实落地效果(新块1 · 南京)

维度

结果

套内面积

60.48 ㎡

自动围合房间

7 间(4 dry + 厨房 + 卫生间 + 阳台)

门窗识别

门 5 / 窗 5 / 垭口 1

解析方式 / 置信度

wall_polygonize / 0.75(触发人工核对提示)

硬装(标准档)

¥94,806.79(70 项)

软装(奶油·标准档)

¥109,100

客户整装预算

≈ ¥203,907

硬装三档:最简 ¥83,735 / 标准 ¥94,807 / 轻奢 ¥107,596 软装五风格(标准档):现代简约 ¥98,190 / 奶油 ¥109,100 / 中古 ¥114,555 / 法式 ¥125,465 / 新中式 ¥130,920

完整复盘见 docs/case_study.md,全部原始产物在 output/

⚠️ 已知边界

  • 单价表基于南京市场(2026),其他城市需替换 config/ 下的价目表

  • 房间围合依赖墙线基本闭合;低置信度结果会在 JSON 中给出 warnings,由上层做人工确认(HITL)

  • 橱柜延米 / 衣柜投影面积默认按户型规则估算,精确报价需实测值覆盖

  • A 层服务通过 importlib 按文件路径加载软装目录的 soft_prices.py,需正确设置 SOFT_REPO_PATH

📜 License

MIT © 2026

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server providing 12 tools for Seattle-area home remodeling: real-time cost estimation across 8 project types, contractor business info, project portfolio, blog content, and quote submission. Connects via Streamable HTTP — no auth required.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Drive the OpenTakeoff construction takeoff engine from any MCP client: open plan PDFs, set and verify drawing scale, one-click room areas, measure lengths, and export takeoff quantities. Runs locally over stdio via npx -y opentakeoff-mcp.
    42
    113
    Apache 2.0
  • F
    license
    A
    quality
    B
    maintenance
    CAD-engineering MCP tool server for parametric modeling, DFM validation, mechanical calculations, and more. Enables code-CAD builds (build123d/CadQuery), model inspection, meshing, and mechanical calculators via MCP stdio.
    11
    -

Latest Blog Posts

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/zeqikong-ctrl/quote-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server