0.3.0 package and tool migration: Install
industriagents-bacnet-mcpfrom npm (requires uv) or PyPI; the command remainsbacnet-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
mcpSDK — installed byuv 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)
| File | Size | Uploaded | |
|---|---|---|---|
| industriagents_bacnet_mcp-0.3.0.tar.gz | 108.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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