关于 ifc-ruhsat
ifc-ruhsat 按土耳其建筑许可 BIM 法规检查 IFC 模型,并生成 EK-9 质量控制表。它面向建筑项目团队,提供带条款依据和 GlobalId 的自动预检;无法机器判定的项目会标为人工检查。
主要功能
- 01按法规检查 IFC 模型
- 02生成 EK-9 检查表
- 03结果附条款与 GlobalId
- 04提供 IFC 摘要及 IDS 文件
- 05CLI 与 MCP 服务接口
适用场景
- 01提交建筑许可模型前进行预检
- 02定位不合规构件及其法规依据
- 03生成交付所需的 EK-9 表
- 04导出 EK-6 和 EK-7 的 IDS 规则
MCP 相关
作为 MCP 服务向客户端提供法规检查、EK-9 表生成、模型摘要、IFC 类别与属性要求及法规信息查询工具。模型通过文件路径或 IFC 文本输入;远程模式仅接受 IFC 文本。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dosya | string | 是 |
详细介绍
ifc-ruhsat
根据法规检查建筑许可 IFC 模型。 在土耳其,2027 年 9 月 1 日生效的《建筑与工程项目数字化编制条例》(《官方公报》2026 年 8 月 5 日,第 33331 期)要求每个许可项目的 IFC 模型符合 241 页的附件要求,并在每次提交时填写 EK-9 模型质量控制表。此工具将这些附件转化为机器规则:读取模型,按条款编号指出缺项,并填写 EK-9 表。可通过命令行或 Claude / Cursor 等客户端(MCP)使用;与软件无关——Revit、Archicad、Allplan、Bonsai 均可提供 IFC。
这是自动化预检。条例中的某些项目(LOD、空间几何、PDF–IFC 一致性)无法通过机器检查;工具会明确标记为“手动”,不会将其视为合规。最终评估由项目设计者和相关主管部门负责;此工具不构成法律意见。
uvx ifc-ruhsat kontrol 123456_00_MM_GNEL_MD_BIM_000_01_000.ifc
ornekler\hatali_ornek.ifc — IFC4X3
10 hata, 3 uyarı, 8 elle kontrol, 7 bilgi
X [m.11, EK-5 5.5 ve Tablo 5.3 · EK-9 m.5] 1 varlığın adı şablona uymuyor. Beklenen: iki harf disiplin,
üç harf kategori kodu ve açıklama, orta tire ile (örn. MM-DVR-dis_20cm) …
3U9N2MO4vDDA4Hfy2J54b4
X [EK-7 Tablo 7.6 · EK-9 m.6] IfcProjectedCRS.Name 'EPSG:3857'; TUREF 3° dilimlerinden biri olmalı:
EPSG:5253 … EPSG:5259.
X [EK-6 Tablo 6.66 · EK-9 m.9] IfcWall: Pset_WallCommon.FireRating (Yangın Dayanım Sınıfı) 1 varlıkta yok ya da boş.
3U9N2MO4vDDA4Hfy2J54b4
X [EK-6 6.1.3 · EK-9 m.17] 1 varlık IfcProxy/IfcBuildingElementProxy ile modellenmiş; yönetmelik vekil sınıfa izin vermez …
? [EK-9 madde 7] Gelişim seviyesi (LOD 300) geometrinin ayrıntısına bakılarak elle değerlendirilir.
完整示例:ornekler/hatali_ornek.EK-9.md — 包含 21 行的 EK-9 表,每行均标注“是 / 否 / 部分 / 手动”及其依据。
安装
只需 Python 3.10+。如果已安装 uv,则无需安装,运行 uvx ifc-ruhsat … 即可。永久安装:
pip install ifc-ruhsat
命令
| 命令 | 功能 |
|---|---|
ifc-ruhsat kontrol model.ifc | 运行所有规则;若有错误则退出代码为 1(可用于 CI)。--json 输出机器可读结果,--ek9 form.md 将 EK-9 表写入文件,--disiplin ST 指定 EK-2 专业代码 |
ifc-ruhsat ek9 model.ifc | 生成 EK-9 模型质量控制表(表 9.1),格式为 Markdown |
ifc-ruhsat ozet model.ifc | 输出架构、生成软件、项目/场地/建筑/楼层信息及类数量 |
ifc-ruhsat ids | 将 EK-6 和 EK-7 写入 buildingSMART IDS 文件(ids/)——Solibri、BIMcollab Zoom、usBIM.IDS、ifctester 均可读取 |
ifc-ruhsat mcp [--http] [--host H] [--port P] | MCP 服务(stdio;使用 --http 启用 streamable HTTP) |
通过 MCP 使用
Claude Desktop、Claude Code、Cursor 以及所有支持 MCP 的客户端:
{
"mcpServers": {
"ifc-ruhsat": { "command": "uvx", "args": ["ifc-ruhsat", "mcp"] }
}
}
然后向助手提问:“C:\proje\A_blok.ifc 是否符合条例要求?请生成 EK-9 表”、“IfcSlab 必须具备哪些属性?”、“柱为什么报错?依据哪条规定?”
| 工具 | 功能 |
|---|---|
yonetmelik_kontrolu | 检查模型;每项发现均附有级别、条款、EK-9 行号和 GlobalId 列表 |
ek9_formu | 生成 Markdown 格式的 EK-9 表 |
model_ozeti | 输出架构、软件、骨架和类数量 |
ek5_siniflar | 必需/可选 IFC 类、土耳其语名称及类别代码 |
ek6_gerekenler | 某个类所需的属性和特性集(EK-6 / EK-7) |
yonetmelik_bilgisi | 依据、分阶段时间表、数据来源 |
模型工具(model_ozeti、yonetmelik_kontrolu、ek9_formu)通过 dosya(路径)或 ifc_metni(IFC 文本,及 dosya_adi)接收文件。所有工具均为只读,并带有 MCP 注解(readOnlyHint、destructiveHint: false、idempotentHint、`openWorldHint: false);每个工具的说明中均写明适用场景、输入示例和返回格式。
服务只读取提供的文件;不会向网络发送任何内容,也不会写入任何持久数据。Cline 等 Agent 可以根据 llms-install.md 自行完成安装。
远程服务(Docker)
ifc-ruhsat mcp --http 会通过可流式 HTTP 在 http://<host>:8080/mcp 地址启动服务(无状态;多个副本可在负载均衡器后运行)。每个 v* 版本都会发布就绪镜像:
docker run --rm -p 8080:8080 -e IFC_RUHSAT_API_KEY=gizli ghcr.io/berkantacun/ifc-ruhsat
| 环境变量 | 默认值 | 含义 |
|---|---|---|
IFC_RUHSAT_HOST | 0.0.0.0 | 监听地址(Azure Container Apps 不支持 IPv6,因此使用 IPv4) |
IFC_RUHSAT_PORT | 8080 | 端口 |
IFC_RUHSAT_API_KEY | — | 若已设置,每个请求的 X-API-Key 标头必须与此值相同,否则返回 401 |
客户端侧:
{
"mcpServers": {
"ifc-ruhsat": {
"type": "http",
"url": "https://sunucu.example.com/mcp",
"headers": { "X-API-Key": "gizli" }
}
}
}
远程模式下,出于安全考虑,dosya 参数已禁用:服务不会读取自身磁盘上的任何路径;如果提供该参数,工具会返回 uzak-dosya-kapali 错误。请通过 ifc_metni 发送模型(服务会在临时文件夹中打开该模型,并在完成后将其删除)。镜像基于 Python 3.12 slim,使用非 root 用户(uid 10001)运行。密钥只是简单的共享密钥;将服务暴露到互联网时,请将其部署在终止 TLS 的反向代理(例如 Container Apps ingress)后面。
检查内容
| EK-9 条目 | 检查项 | 状态 |
|---|---|---|
| 2 项目信息 | IfcProject、IfcPerson、IfcOrganization、IfcPersonAndOrganization 属性(EK-7 表 7.1–7.5) | 自动 |
| 3 文件/项目名称 | EK-2 表 2.1 中的九个字段;IfcProject.Name | 自动(不会将子专业/文件类型代码与列表进行比对) |
| 4 空间编号/名称 | IfcSpace.Name Kat_Bölüm_SıraNo(EK-3 表 3.1,楼层代码见 EK-2 表 2.14),LongName 不为空 | 自动 |
| 5 实体名称 | Disiplin-Kategori-Açıklama;专业见 EK-2,类别代码见 EK-5,并检查其与类的兼容性 | 自动 |
| 6 坐标 | IfcProjectedCRS(EPSG:5253–5259、基准、分区、单位)+ IfcMapConversion(EK-7 表 7.6–7.7) | 自动 |
| 7 LOD 300 | — | 手动 |
| 8 / 17 类 | EK-5 必填 + 可选列表;禁止使用 IfcProxy / IfcBuildingElementProxy;使用子类而非父类 | 自动 + 手动(语义) |
| 9 / 20 属性和特性 | EK-6 的全部 68 个必填类表格:Name、Tag、材料(Ad_Dayanım)、IfcSystem 关联、楼层、Pset_/Qto_/TREpys_ 特性、数据类型、允许值;还会检查出现在错误集合中的特性 | 自动 |
| 10 容积率 | 根据 EmsalDurumu(DAHIL/HARIC/DIGER)汇总 IfcSpatialZone 字段,并与 KAKS × 地块面积进行比较 | 部分自动(与图纸表格的比较需手动) |
| 11 结构 | 项目、场地、建筑、≥1 个楼层;单个 IfcProject | 自动 |
| 12 是否存在空间 | 建筑专业中存在 IfcSpace | 自动 |
| 13–14 空间几何 | 每个空间都有带体积的 3D 实体;同一楼层的空间边界框重叠不超过 10% | 自动(基于边界框,较粗略) |
| 15 楼层关联和标高 | 每个元素都关联到一个楼层;其实体位于该楼层标高与上一楼层标高之间(±1.5 m) | 自动 |
| 16 重复项 | 重复的 GlobalId;相同类+名称+位置 | 自动 |
| 18 IFC 版本 | IFC4X3、.ifc 扩展名 | 自动 |
| 19 预定义类型 | 为空 / NOTDEFINED;若为 USERDEFINED,则需填写 ObjectType | 自动 |
| 1、21 | 未公布文件大小上限;PDF–IFC 一致性 | 手动 |
EK-6 的全部 68 个必填类表格均已逐页从最终版《官方公报》附件中读取并编码;每个属性都会依据 IFC 4.3 架构进行测试验证,每个特性都会依据 buildingSMART 的官方 Pset 模板进行测试验证。各表格对应的页码见:KAYNAKLAR.md。几何检查(空间实体、重叠、标高)基于边界框——快速但较粗略;对于 L 形空间可能会误报,发现说明中也会指出这一点。
实际模型中的表现
在 3 个公开模型上未作任何修改的检测结果(这些模型制作时相关法规尚未出台;结果回答了“准备情况如何”):
| 模型 | 架构 | 耗时 | 错误 / 警告 | 主要问题 |
|---|---|---|---|---|
| buildingSMART 官方 IFC 4.3 示例,Building-Architecture.ifc(SketchUp,21 个实体) | IFC4X3 | < 1 s | 32 / 5 | 坐标系为 EPSG:32760(不是土耳其分区);2 个代理类;没有房间编号和 TREpys_ 集;Pset_BuildingCommon 为空 |
| Revit 2021 住宅项目,Ifc4_Revit_ARC.ifc(13 MB,522 个实体) | IFC4 | 1,7 s | 47 / 12 | 不是 IFC 4.3;66 个 IfcBuildingElementProxy;511 个实体名称不符合模板;47 面墙缺少 FireRating;IfcPlate(44 块幕墙板)不在法规清单中;没有 IfcSpace;没有坐标系 |
| IfcOpenShell 示例住宅,Ifc4_SampleHouse.ifc(2 MB) | IFC4 | < 1 s | 40 / 9 | IFC4;使用了 IfcWallStandardCase(已在 4.3 中移除);材料名称不符合 Ad_Dayanım 格式;28 个构件没有预定义类型 |
结论:如今典型的 Revit 输出与法规要求的文件之间差距很大,但可以量化——升级到 IFC 4.3、对代理类进行分类、采用命名模板、补充防火/用途属性,以及添加土耳其专用的地块/容积率集。工具会附上相应 GlobalId,列出这些问题。此外,也显现出法规本身的遗漏:Revit 输出的幕墙板使用 IfcPlate,但它不在 EK-5 的两个清单中(KAYNAKLAR.md)。
法规简述
- 许可申请附带的项目须基于 BIM 编制,交付 IFC 4.3(TS EN ISO 16739-1);由模型生成 2D 图纸并以 PDF/A 格式提交(第 4、9 条)。
- 构件须采用 EK-5 中的类别,并按
Disiplin-KategoriKodu-Açıklama格式命名(第 11 条、EK-5);禁止使用代理类(EK-6 6.1.3)。 - 每个类别须填写 EK-6 中的属性和属性集;项目还须填写 EK-7(包括土耳其专用的
TREpys_集)(第 12–13 条)。 - 模型的 LOD 为 300(EK-8);每次交付都须填写 EK-9 表格(第 15 条)。
- 时间表(临时第 1 条):2027 年 9 月 1 日生效;从 2029 年 9 月 1 日起,大城市中面积 >10.000 m² 的项目开始交付 IFC;2032 年 9 月 1 日起适用于所有建筑,2033 年 9 月 1 日起适用于非住宅建筑。
法规原文:Resmî Gazete 20260805-2 · 附件(241 页):20260805-2-1.pdf
自定义规则
法规数据位于 src/ifc_ruhsat/ekler/*.json 中;每个文件都会在自身的 kaynak 字段中注明来源。添加 EK-6 表格:查阅相应的 Resmî Gazete 页面,将行和页码写入 ek6_ozellikler.json,然后运行测试。添加规则:在 src/ifc_ruhsat/kurallar/ 下创建签名为 kontrol(baglam) -> list[Bulgu] 的模块,并在 kontrol.py 的 MODULLER 中添加一行。每条发现都必须关联一条法规条款和一行 EK-9;没有依据的规则不会添加。
uv sync && uv run pytest && uv run ruff check .
English
ifc-ruhsat checks an IFC model against Türkiye's building-permit BIM regulation (Official Gazette 5 Aug 2026, no. 33331; in force 1 Sep 2027; IFC delivery phased in from Sep 2029). It encodes the regulation's annexes — mandatory IFC 4.3 classes and 3-letter category codes (Annex 5), per-class attribute and property-set requirements including the Turkish TREpys_ sets (Annex 6), project/person/organisation and TUREF coordinate requirements (Annex 7) — and fills in the 21-row model quality-control form (Annex 9). Findings cite the article and annex table and list GlobalIds. Vendor-neutral (IfcOpenShell), usable as a CLI, as an MCP server for Claude/Cursor, and as buildingSMART IDS files for Solibri/BIMcollab/usBIM. It is an automated pre-check, not legal advice; rows that cannot be verified by machine are reported as manual, never as passed.
许可证
MIT。法规文本及其附件属于公共文件;此处的 JSON 文件是这些附件的机器可读格式,每个文件中都注明了来源页面。
mcp-name: io.github.BerkantACUN/ifc-ruhsat
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。