Skip to main content

0.3.0 package and tool migration: Install industriagents-bacnet-mcp from npm (requires uv) or PyPI; the command remains bacnet-mcp. The advertised catalog now contains 5 tools. Older tool names in the examples below remain compatibility calls. See the architecture and canonical tool guide and release guide.

bacnet-python

A Python MCP server for BACnet/IP. Built with uv, bacpypes3 and the mcp SDK (FastMCP), it exposes the bacnet-mcp CLI, which lets AI agents and MCP-compatible clients discover devices (Who-Is/I-Am), read and write object properties (ReadProperty/WriteProperty), and address objects through friendly aliases.

Status: early. Discovery, reads and (opt-in) writes go over BACnet/IP and are tested in CI against the mock device in ../bacnet-mock-device, not yet against third-party controllers. See Status in the repository README for what is not implemented.

Requirements

  • Python 3.11+
  • uv
  • bacpypes3 and the mcp SDK — installed by uv sync

Quick start

From this directory (bacnet-python/):

uv sync
uv run bacnet-mcp

By default the server binds UDP 127.0.0.1:47808, has no broadcast address (so discovery needs a target address, such as the mock's 127.0.0.1:47809) and refuses writes. Environment variables configure the interface and prefix, port, device instance, write switch, timeouts, log level and the optional object map; see Configuration for the full list and .env.example for this directory's .env — the only one read without --env-file, and only for BACNET_* connection settings. A .env in the working directory or a parent is never read. The write switch BACNET_WRITES_ENABLED and OBJECT_MAP_FILE are read only from the process environment or a file named with --env-file.

bacnet-mcp --help lists the options (--env-file PATH, --version).

The process speaks MCP JSON-RPC on stdout and nothing else: all logging goes to stderr, and while the server runs sys.stdout points at stderr too.

Tests and lint

uv sync --locked
uv run --locked pytest
uv run --locked ruff check .
uv run --locked ruff format --check .

The suite binds BACnet/IP only on free 127.0.0.1 UDP ports. It covers the configuration, the BACnet client against the mock device (imported from ../bacnet-mock-device), the tools through an in-memory MCP session, and an end-to-end run that starts the mock and python -m bacnet_mcp.cli as separate processes and drives the server over stdio with the mcp client SDK.

Layout

bacnet-python/
├── README.md
├── pyproject.toml
├── uv.lock
├── .python-version
├── .env.example
├── src/bacnet_mcp
│   ├── __init__.py
│   ├── cli.py            # entry point: .env, stderr logging, startup checks
│   ├── server.py         # FastMCP wiring, lifespan, stdout guard
│   ├── tools.py          # the seven tools, argument checks, object map
│   └── bacnet_client.py  # configuration and the bacpypes3 client
└── tests/

Metadata

Release files for industriagents-bacnet-mcp 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for industriagents-bacnet-mcp 0.3.0
File Size Uploaded
industriagents_bacnet_mcp-0.3.0.tar.gz 108.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for industriagents-bacnet-mcp 0.3.0
File Interpreter ABI Platform
industriagents_bacnet_mcp-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 155.1 kB

Release files / industriagents_bacnet_mcp-0.3.0.tar.gz

Download URL industriagents_bacnet_mcp-0.3.0.tar.gz
Size 108.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4683f2172ea4daa71d00d86a174ea3dc70b0d6e3d8f669e3a46d27e69f89cf5c
BLAKE2b-256 checksum
How to use checksums
4ede428d6c37ced8c913228ba559639e78faadf12ed6338148b3fca2d03678f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / industriagents_bacnet_mcp-0.3.0-py3-none-any.whl

Download URL industriagents_bacnet_mcp-0.3.0-py3-none-any.whl
Size 47.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4c7f76dfa0befc2fb63daa06c242a35cc65d2cbd1b24d06fbd85644b4e599e09
BLAKE2b-256 checksum
How to use checksums
b259e71a10f952dcb70bf3707c3d02be5228d0cafff126cd1cf20b9785871839
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page