协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
oce-mcp-integration【开发与工程】Connect OpenConstructionERP to AI coding assistants via MCP (Model Context Protocol): expose costs, BOQ, BIM and catalog endpoints as MCP tools so Claude Code / Antigravity / OpenCode can drive the platform. Use when wiring an assistant to the ERP.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
MCP (Model Context Protocol) is the 2026 standard for giving AI assistants tools. Wrapping OpenConstructionERP's REST API in an MCP server turns the assistant from a chat partner into an operator: it can load a cost base, search items, build a BOQ and read validation results itself.
| MCP tool | Underlying API | Notes |
|---|---|---|
list_cost_bases | GET /api/v1/costs/base-catalog | families, variants, positions, loaded badge |
load_cost_base | POST /api/v1/costs/load-cwicr/{db_id} | idempotent, returns imported/skipped |
search_cost_items | GET /api/v1/costs/?region=...&q=... | SQL path, works without Qdrant |
get_cost_item | GET /api/v1/costs/{id} | full components[] + classification |
category_tree | GET /api/v1/costs/category-tree/?region=... | browsing |
suggest_for_element | POST /api/v1/costs/suggest-for-element | BIM element → cost ranking |
create_boq / validate_boq | POST /api/v1/boqs, /boqs/{id}/validate/ | estimating |
import_catalog | POST /api/v1/catalog/import/{region} | resource catalog |
// mcp-server: FastMCP wrapper around the ERP's FastAPI backend
import { FastMCP } from "fastmcp";
const ERP = process.env.OPENESTIMATE_URL ?? "http://localhost:8000";
const server = new FastMCP({ name: "openconstructionerp" });
server.addTool({
name: "load_cost_base",
description: "Load a CWICR cost base (e.g. TR_NATIONAL, ZH_CHINA) into the ERP.",
parameters: { db_id: { type: "string", required: true } },
execute: async ({ db_id }) => {
const r = await fetch(`${ERP}/api/v1/costs/load-cwicr/${db_id}`, {
method: "POST",
headers: { Authorization: `Bearer ${process.env.ERP_TOKEN}` },
});
return await r.json();
},
});
server.addTool({
name: "search_cost_items",
description: "Search cost items in a region by keyword.",
parameters: { region: { type: "string" }, q: { type: "string" } },
execute: async ({ region, q }) => {
const r = await fetch(`${ERP}/api/v1/costs/?region=${region}&q=${encodeURIComponent(q)}&limit=20`,
{ headers: { Authorization: `Bearer ${process.env.ERP_TOKEN}` } });
return await r.json();
},
});
server.start({ transportType: "stdio" });
load_cost_base returns already_loaded on repeat.ERP_TOKEN).api_rate_limit (200/min default).