無料積算ソフトとRevitをMCPサーバで連携させる

 了解。無料(フリー/オープンソース)積算系とRevitを“間にMCPサーバ”でつないで自動化するなら、現実的で保守しやすい選択肢は主にこの2ルートです。


推奨ルート(どちらも無料)


1. IFC → IfcOpenShell/BlenderBIM系 QTO → 原価表マッピング(CSV)




RevitからIFCを書き出し


MCPがIf cOpenShell(Python)やBlenderBIMのQTO機能で数量(面積・体積・長さ・個数など)をCSV化


MCPが**単価表(CSV)**と突き合わせて見積明細を生成(CSV/Excel)

→ すべて無料で閉じられる構成。IfcOpenShellはIFC2x3/IFC4系列に対応し、QTO(Quantity Set/IfcElementQuantity)のAPIや例が公開済み。BlenderBIM側にも数量計算・QTO更新の運用知見が多数あります。



2. IFC → FreeCAD BIMのスケジュール(数量表) → CSV




Revit→IFC


MCPがFreeCAD(CLI/ヘッドレス)で数量表(Schedule)を生成→CSV出力

→ FreeCADはBIMワークベンチで数量表・属性・スプレッドシート連携が豊富。



> 2D図面から面積拾いをしたいだけならEasyPDFTakeoff等のフリー系もあるが、BIM(IFC)と直結はないので「Revit→IFC→自動積算」の一貫自動化には①/②が向きます。





---


アーキテクチャ(MCPが“自動化のハブ”)


Revit Add-in(IFC自動出力)

   └→ 共有フォルダ/S3 へIFC保存

        └→ MCPサーバがIFC検知(ウォッチャ)

             ├─ IfcOpenShell/BlenderBIM で QTO CSV生成

             ├─ 単価表CSV とJOIN(原価・歩掛・端数処理)

             ├─ 見積CSV/Excelを生成、監査ログ保存

             └─ Webhook/メール/Teams等で通知


Revit側は“IFC出力を人手にしない”(外部コマンドAdd-inで規定プロファイル一発書き出し)


**数量の“正”**はIFC → QTO(IfcElementQuantity/QuantitySet)で統一し、モデル側で属性を整備


MCPは再試行キュー、ログ、単価改定のバージョン管理を担当




---


MCPサーバ(Python)最小サンプル


> IfcOpenShellで要素ごとの数量を集計し、単価表と突合して見積CSVを出力する例(骨子)。




# pip install ifcopenshell pandas

import ifcopenshell, pandas as pd, os, time


UNIT_COST_CSV = r"/srv/cost/unit_prices.csv"   # columns: class, material(optional), unit, unit_price

OUT_DIR       = r"/srv/cost/out"


def qto_from_ifc(ifc_path: str) -> pd.DataFrame:

    model = ifcopenshell.open(ifc_path)

    rows = []

    # 代表的カテゴリを対象にする例

    targets = ["IfcWall","IfcSlab","IfcBeam","IfcColumn","IfcDoor","IfcWindow","IfcCovering","IfcStair"]

    for t in targets:

        for e in model.by_type(t):

            # 既存のQuantitySetを読む or 必要なら計算して付与(環境によりBlenderBIM側のQTO更新を先に実行)

            qsets = ifcopenshell.util.element.get_psets(e, psets_only=False, qtos_only=True)

            q = qsets.get("BaseQuantities", {})  # NetVolume/NetArea/Length/Count等が入ることが多い

            rows.append({

                "guid": e.GlobalId,

                "ifc_class": t,

                "name": getattr(e, "Name", ""),

                "NetVolume": q.get("NetVolume"),

                "NetArea": q.get("NetArea"),

                "Length": q.get("Length"),

                "Count": 1

            })

    return pd.DataFrame(rows)


def estimate(df_qto: pd.DataFrame) -> pd.DataFrame:

    price = pd.read_csv(UNIT_COST_CSV)  # class, unit, unit_price

    # 単位ごとに優先数量を選ぶ例

    def pick_qty(row, unit):

        return {

            "m3": row.get("NetVolume") or 0,

            "m2": row.get("NetArea") or 0,

            "m":  row.get("Length") or 0,

            "pcs": row.get("Count") or 0

        }.get(unit, 0)


    out_rows = []

    for _, r in df_qto.iterrows():

        for _, p in price[price["class"]==r["ifc_class"]].iterrows():

            qty = pick_qty(r, p["unit"])

            cost = qty * p["unit_price"]

            if qty > 0:

                out_rows.append({

                    "ifc_guid": r["guid"], "class": r["ifc_class"], "name": r["name"],

                    "unit": p["unit"], "qty": qty, "unit_price": p["unit_price"], "cost": cost

                })

    return pd.DataFrame(out_rows)


def run(ifc_path: str) -> str:

    df_qto = qto_from_ifc(ifc_path)

    df_est = estimate(df_qto)

    ts = time.strftime("%Y%m%d_%H%M%S")

    os.makedirs(OUT_DIR, exist_ok=True)

    out = os.path.join(OUT_DIR, f"estimate_{ts}.csv")

    df_est.to_csv(out, index=False)

    return out


if __name__ == "__main__":

    print(run(r"/srv/inbox/model.ifc"))


IfcOpenShellのAPI/コード例は公式ドキュメントにまとまっています。数量セット(QTO)の追加・編集関数も提供されています。


BlenderBIM側の運用では、数量計算を明示的に実行(例:UIやスクリプトでQTO更新)する必要がある旨の知見があります。




---


Revit側(IFC自動出力の要点)


プロジェクト標準のIFCエクスポート設定(座標系/プロパティセット/小数点・単位)をテンプレ化


外部コマンドAdd-inで保存先・命名規則・バージョンタグを自動付与


MCPへREST通知 or 共有フォルダ監視で検知



> FreeCADルートを使う場合は、FreeCADのBIM/Spreadsheetワークベンチでスケジュールを作成→CSV書き出しをCLIで回すだけでも動きます。





---


単価表(CSV)運用のコツ


列例:class, material, spec, unit, unit_price, waste_ratio


端数処理・歩掛を式列で管理(後続でExcel化してもOK)


品目マスターのリビジョンをMCPがGitや日付でバージョン管理




---


まず決めること(最短で動かすための初期設定)


1. どのQTOを正とするか:IFCのBaseQuantitiesを使う/BlenderBIMで計算して書き戻す/FreeCAD側で拾う



2. 単位・丸め:m²/m³/m/個の優先順位と端数ルール



3. 品目マップ:IfcClass→標準品目コードの対応表



4. 通知とログ:成功/失敗のSlack・メール通知、見積CSVの保存先





---


追加で用意できます


Revit Add-inの完成テンプレ(.addin含む)


MCPの監視+キュー+通知を備えた実運用用サーバスクリプト


BlenderBIMヘッドレス用のQTO更新スクリプト、またはFreeCAD CLIでのスケジュールCSV出力スクリプト



どのルート(IfcOpenShell/BlenderBIM or FreeCAD)で行きますか? 既存の単価表フォーマット(CSV/Excel)があれば、それに合わせてサンプルをこちらで即整えます。


コメント

このブログの人気の投稿

ミライアイ内服薬は薬事法違反で、ほとんど効果がない詐欺ですか?

最高裁での上告理由書受理・却下の判断基準について

裁判官の忌避申立書の作成例