Brick Bacnet Mcp

io.github.Yveshby27由 GitHub 账号 Yveshby27 发布v0.1.0a2更新于 Oct 24, 2026

Read-only BACnet/IP MCP gateway with Brick + Haystack semantic tagging at ingest

发布方自己的服务:brick.blue

概览

AI 生成的概览

只读的 BACnet/IP 网关,在采集时用 Brick 与 Haystack 语义标注楼宇自控点位,供助手查询。

可以做什么
  • 发现本地广播域内的 BACnet/IP 设备并列出
  • 逐设备枚举对象,读取当前值、单位与描述
  • 按可编辑的 YAML 规则为对象打上 Brick 类与 Haystack 标签集
  • 查询带标签的拓扑,例如筛选出所有空气处理机组
适用场景
适用于楼宇自控或设施运维场景:希望助手以带语义标签的形式查看多厂商楼宇的 BACnet/IP 点位数据,例如为下游故障诊断或智能体流程提供输入。它只是采集层,不是控制或分析平台。
运行要求
以 Python 包形式本地运行(需 Python 3.11 或更高版本),默认通过 stdio 通信,也可配置为 streamable HTTP。需要一份 YAML 配置文件,包含本地设备实例号、广播地址与轮询间隔,并能访问 BACnet/IP 广播域网络。未声明认证或环境变量。
安装前请注意
该服务器明确不带认证,设计用于可信的本地网络,不要将其暴露到该网络之外。它会在网络中发送发现广播并轮询设备数值。标注质量取决于本地 YAML 规则,依赖结果前建议先运行覆盖率报告。当前版本为只读,没有写入路径。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Brick Bacnet Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

brick-bacnet-mcp

A read-only BACnet/IP gateway that exposes building automation point databases to LLM agents via MCP, with Brick + Project Haystack semantic tagging at ingest time.

Why this exists

The research note this implementation came out of is at https://habchy.dev/research/bacnet-msi-semantic-gap. A version of the same article is also published at AutomatedBuildings.com (link will be added when the AB.com edition goes live).

Short version: vendor agentic platforms (JCI OpenBlue, Honeywell Forge, Siemens Building X, Tridium Niagara 5) keep their semantic AI layer inside their own controls portfolios. Independent MSIs running mixed-vendor 5-50 building portfolios have BACnet point databases but no clean way to expose them in semantic-tagged form to external LLM agents. This gateway is one answer to that gap.

ezhuk/bacnet-mcp does read and write at the BACnet protocol layer with no semantic normalization. This project sits beside it: it adds the Brick + Haystack tagging step at ingest and restricts the v0.1 surface to read-only for a tighter compliance footprint.

What it does (v0.1)

  • Discovers BACnet/IP devices on the local broadcast domain (Who-Is, I-Am)
  • Enumerates objects per device (AI, AO, AV, BI, BO, BV, MSI, MSO, MSV, Schedule, Calendar)
  • Reads present-value, units, and description per object
  • Tags each object with a Brick class and a Haystack tag set using rule-based mapping (rules are extensible via YAML)
  • Exposes the tagged topology to any MCP host via four tools: list_devices, list_objects, get_object_value, get_tagged_topology

What it isn't (v0.1)

  • Not a write path. WriteProperty is intentionally out of v0.1 for the compliance-surface reasons noted in the research article.
  • Not a Niagara station integration. Fox protocol / Niagara module wrapping is a separate design.
  • Not an FDD or analytics platform. The tagged topology is meant to be consumed by downstream FDD or LLM-agent workflows. This gateway is the ingest layer only.
  • Not a UI. Output is MCP only. Pair it with Claude Desktop, Cursor, or any other MCP host.
  • Not BACnet/SC. v0.1 is BACnet/IP only. Secure Connect is a v0.2 consideration.
  • Not 223P full schema parity. v0.1 uses the simplified Brick + Haystack mapping. Full 223P entity model is a v0.2 candidate.
  • Not multi-site federated. v0.1 handles one broadcast domain at a time.
  • Not authenticated. v0.1 runs in a trusted local network environment.

Install

bash
pip install brick-bacnet-mcp

Or from source:

bash
git clone https://github.com/Yveshby27/brick-bacnet-mcpcd brick-bacnet-mcppip install -e .

Python 3.11 or later required.

Quick start

Create a config file config.yaml:

yaml
bacnet:  local_device_instance: 555001  broadcast_address: 192.168.1.255  polling_interval_seconds: 30rules:  brick: src/brick_bacnet_mcp/rules/brick_rules.yaml  haystack: src/brick_bacnet_mcp/rules/haystack_rules.yamlmcp:  transport: stdio  # or "http" for a hosted MCP host  http_port: 8080   # only if transport == httplog_level: INFO

Run the MCP server:

bash
brick-bacnet-mcp --config config.yaml

Or wire it into Claude Desktop:

json
{  "mcpServers": {    "brick-bacnet": {      "command": "brick-bacnet-mcp",      "args": ["--config", "/path/to/config.yaml"]    }  }}

Example interaction

With the server running and the simulator active (or a real BACnet/IP network reachable), an MCP-capable LLM can run:

User: List all the air-handling units across the building.

Agent (via MCP tool): calls get_tagged_topology(filter="brick:AHU")

Agent response: Found 3 AHUs. AHU-1 has 5 child points (discharge_air_temp, return_air_temp, supply_fan_status, mixed_air_damper_position, outside_air_temp). AHU-2 ... AHU-3 ...

See examples/ for full runnable scripts.

Checking coverage on your building

The starter rule library targets common US-style object-name conventions (OAT, DAT, ZNT, CHWS, AHU-1, etc.). Real-world mixed-vendor portfolios use wildly different naming. Before assuming the tool is broken or working, run:

bash
brick-bacnet-mcp --coverage-report --config config.yaml

This does one discover + enumerate + tag cycle against your network and prints:

  • Total objects discovered
  • Brick / Haystack match percentages
  • Top 20 most-common object names that no rule matched (use --top-unmatched N for a different count)
  • Top 10 hottest rules

Use the unmatched list to extend the YAML rule files for your naming convention. A first-run match rate of 30-50% is normal for a portfolio that hasn't been calibrated yet; 70%+ is what you'd want before relying on the tagged topology for LLM queries.

How tagging works

The tagger applies YAML-defined rules to map BACnet object names and units to Brick classes and Haystack tag sets. The default rule set covers about 50 common HVAC, lighting, and metering object-name patterns. Users override or extend by editing src/brick_bacnet_mcp/rules/brick_rules.yaml and haystack_rules.yaml locally.

Example rule (Brick):

yaml
- pattern: '(?i)^(oat|outside_air_temp|outsideair)$'  units: ['degF', 'degC', '°F', '°C']  brick_class: 'Outside_Air_Temperature_Sensor'

See docs/RULES.md for the rule grammar and override conventions.

Architecture

See docs/ARCHITECTURE.md. Short version:

  • discovery.py runs Who-Is broadcast, captures I-Am responses, caches device metadata
  • reader.py enumerates the object list per device and polls present-value at the configured interval
  • tagger.py applies Brick + Haystack rules to each enumerated object
  • topology.py assembles the tagged objects into a queryable graph
  • server.py exposes four MCP tools over stdio or streamable HTTP

Roadmap

v0.1 is a research instrument. The roadmap below is what the research article flagged as worth doing next IF v0.1 gets enough sustained-use signal to justify extending. None of it is committed pre-signal.

  • v0.2: COV subscription support, BACnet/SC, 223P full schema parity, SkySpark / FIN Haystack-store passthrough
  • v0.3+: Optional write path behind explicit opt-in, multi-site federation, authentication layer for non-local deployment

Acknowledgments

  • ezhuk/bacnet-mcp for the prior-art MCP + BACnet integration that this project builds beside
  • bacpypes3 for the BACnet protocol library
  • Project Haystack for the Haystack tagging vocabulary and community
  • Brick consortium for the Brick schema
  • The named MSI voices whose published positioning this research builds on: Brian Turner (Adaptive Buildings), Marc Petock (Lynxspring), Tom Shircliff and Rob Murchison (Intelligent Buildings LLC), Jim Meacham (Altura Associates), Therese Sullivan (BuildingContext), Alper Üzmezler (BASSG)

License

MIT. See LICENSE.

Contributing

See CONTRIBUTING.md. PRs welcome for rule library extensions, documentation, examples, and test coverage. Larger changes (write path, non-BACnet protocol support, UI, FDD logic) are out of v0.1 scope. Open an issue first to discuss before submitting a PR.

来源:README.md,提交 9a14a47

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.0a2最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Brick 集成