VentilatePro CLI
The plumbing identity foundation supports explicit Revit model registrations,
reviewed mappings to existing rooms, and read-only fixture scan previews.
Start with ventilatepro schemas show revit_identity --json and
ventilatepro revit-identity catalog --project 4 --json.
See identity commands.
Fixture persistence, Revit extraction and the plumbing web workspace follow in
later increments.
Pump head worksheets can be inspected with
ventilatepro equipment show hydronic-pumps 7 --json and saved with
ventilatepro equipment update hydronic-pumps 7 --input pump-head.json --json.
See pump head commands for a payload example;
saving recalculates the head used by equipment schedules.
The ChatGPT sidebar workspace at https://ventilatepro.com/mcp/workspace
includes a Home tab with calculator and saved-result workflows, documentation
links, and prompt examples that can start a chat on supported hosts.
See the workspace guide.
The engineering plugin at https://ventilatepro.com/mcp supports preparing,
running and reporting Revit-based room load calculations, with typed tools and
the same scoped backend as the web app. Existing read-only workspace grants
stay read-only; reconnect after deployment for engineering access.
ventilatepro design-day prepare --project 1 --json > load-review.json
Review readiness and assumptions, then submit the returned request with
--revision <source_revision> --signature <input_signature>. Poll
design-day status --job <id>, read design-day results --job <id> --json, and
save design-day report --job <id> --output loads.csv. See
design-day commands for options and scopes.
These are preliminary EnergyPlus room loads; equipment sizing and Title 24
compliance are unavailable.
VentilatePro CLI is a local command-line client for authenticating to VentilatePro, recording project notes and meeting minutes, and running scoped engineering workflows.
It also includes offline HVAC calculations for PsychroLib-based psychrometrics, sensible and total air loads, complete air-process balances, hydronics, IAPWS-IF97 saturated steam through CoolProp 8.0.0, fan and pump power, duct sizing, and LMTD. Local calculations require no login and are also available as typed MCP tools.
MCP Registry: com.ventilatepro/ventilatepro (this line also verifies PyPI package ownership for the registry).
Public documentation: CLI quick start, HVAC calculation reference, and MCP setup and tool discovery. Local integration details: MCP guide. Python 3.10 or newer is required.
Install
Published releases install from PyPI:
pipx install ventilatepro-cli
Upgrade an existing install:
pipx upgrade ventilatepro-cli
Local development install:
cd ventilatepro-cli
pip install -e .
Commands
ventilatepro auth login
ventilatepro projects list
ventilatepro projects show 1
ventilatepro projects update 1 --scope-of-work "Replace AHU-1; exclude central plant work."
ventilatepro memory context --project 1 --json
ventilatepro rooms list --project 1
ventilatepro room-equipment summary --project 1
ventilatepro room-equipment create --data '{"room": 501, "name": "Sterilizer", "heat_gain_value": 1.8, "heat_gain_unit": "KW"}'
ventilatepro revit-imports review --project 1 --json
ventilatepro revit-imports confirm 41 --project 1 --review-token <token-from-review> --yes
ventilatepro categorization review --project 1 --output room-categorization.json
ventilatepro categorization apply --project 1 --input room-categorization.json --yes
ventilatepro ahus list --project 1
ventilatepro controls drawing catalog --project 1 --json
ventilatepro controls drawing get --package 9 --json
ventilatepro controls drawing export --package 9 --format dxf --output AHU-1-controls.dxf
ventilatepro schedules fields air_handling_unit_schedule
ventilatepro schedules set air_handling_unit_schedule AHU-1 --project 1 --set basis_of_design_manufacturer_and_model="Trane CSAA012"
ventilatepro schedules add-remark air_handling_unit_schedule --project 1 --text "PROVIDE WITH FACTORY-MOUNTED DISCONNECT."
ventilatepro schedules set air_handling_unit_schedule AHU-1 --project 1 --remarks 1
ventilatepro bug-reports list
ventilatepro bug-reports resolve 12 --note "Fixed in #130"
ventilatepro systems hierarchy --project 1
ventilatepro calc status --project 1
ventilatepro calc ahu-properties --ahu 1
ventilatepro calc psychrometrics --dry-bulb 75 --relative-humidity 50 --json
ventilatepro calc air-process --cfm 5000 --entering-dry-bulb 80 --entering-rh 50 --leaving-dry-bulb 55 --leaving-rh 95 --json
ventilatepro calc steam --pressure 15 --pressure-units psig --load 1000000 --json
ventilatepro calc fan-power --cfm 20000 --static-pressure 4 --fan-efficiency 0.68 --motor-efficiency 0.92
ventilatepro design-day context --project 1
ventilatepro notes create --project 1 --body "Captured from terminal"
ventilatepro notes create --project 1 --kind site_visit --title "Level 2 ceiling walk" --body "Corridor 204 is tight"
ventilatepro notes list --project 1 --pinned
ventilatepro memory playbook
ventilatepro memory context --project 1
ventilatepro memory search "HHW delta T" --project 1
ventilatepro memory log --project 1 --summary "Reviewed pump selections" --fact "CHWP-2 is 40 GPM short" --used note:12
ventilatepro memory review --project 1
ventilatepro memory curate retitle note:14 --project 1 --title "Roof hatch size" --reason "Title was vague"
ventilatepro notes sync
ventilatepro meetings context --project 1 --json
ventilatepro meetings record --project 1 --input meeting.json --json
ventilatepro meetings list --project 1
ventilatepro decisions create --project 1 --text "Use heat recovery on AHU-2" --reason "Energy model payback" --tags ahu,energy
ventilatepro decisions list --project 1
ventilatepro decisions revise 51 --text "Use heat recovery with bypass control"
ventilatepro tasks context --project 1 --json
ventilatepro tasks create --project 1 --description "Issue updated duct plan" --assignee-id 12 --priority high
ventilatepro tasks list --assignee me --status open,in_progress --due overdue
ventilatepro tasks update 46 --status done
ventilatepro tasks bulk 46 47 --due-at 2026-10-05
ventilatepro tasks comment 46 --text "Sent to the architect for review"
ventilatepro reviews start --project 1 --drawing M-set.pdf --spec div23.pdf --codes "IMC 2024" --phase CD --wait
ventilatepro reviews findings --review <review-id> --severity critical,major
ventilatepro reviews report --review <review-id> --as csv --output findings.csv
ventilatepro mcp doctor
ventilatepro-mcp
ventilatepro-mcp starts the local stdio MCP server for Codex, Claude Desktop,
and other MCP clients. It uses the same saved base URL and CLI token created by
ventilatepro auth login. The package-named ventilatepro-cli executable does the
same thing, so uvx ventilatepro-cli or pipx run ventilatepro-cli starts the
server with no install step. The remote streamable-HTTP endpoint at
https://ventilatepro.com/mcp uses OAuth instead of a token.
Local HVAC tools (vp_calculate_psychrometrics,
vp_calculate_air_process, vp_calculate_steam, and the rest of the catalog)
do not use that login or make network requests.
For meeting capture, Codex first reads meetings context to resolve names to
stable project-member IDs, interprets the PM's prose into a structured JSON
payload, and calls meetings record. The server atomically creates the meeting,
decisions, and assigned project tasks and returns a direct web-app link.
For standalone work, Codex reads tasks context to resolve an assignee to a
stable project-member user ID, then calls tasks create. The same workflow is
available through the typed vp_get_task_context and
vp_create_project_task MCP tools.
Design decisions do not require meeting minutes. Codex can call decisions create or vp_create_decision as soon as a PM communicates a decision, with
an optional meeting ID only when the relationship is useful. Listing, showing,
and revising decisions are available through first-class CLI and MCP surfaces;
revisions preserve the prior version as immutable history.
For room classification, Codex can read the project-specific categorization review resource or use the dedicated MCP tools. Review manifests default every room to rejected so ambiguous spaces remain visible until a category is explicitly accepted with a reason.
For staged Revit imports, agents use revit-imports review or
vp_review_revit_import first. The returned review token identifies the exact
payload and diff that was inspected. Confirmation requires that unchanged token
plus explicit --yes or MCP confirm=true; stale reviews are rejected.
MCP setup
ChatGPT web
Create a custom ChatGPT plugin with OAuth authentication and use this complete server URL:
https://ventilatepro.com/mcp
ChatGPT discovers VentilatePro's OAuth 2.1 metadata automatically. Sign in to VentilatePro and approve the requested scopes; do not create or paste a CLI token into ChatGPT. The flow uses authorization code + S256 PKCE, short-lived access tokens, rotating refresh tokens, and exact ChatGPT callback validation.
Local stdio clients
- In the VentilatePro web app, open Account Settings and create a CLI token with
the
Agent Editorpreset. - Log in locally:
ventilatepro auth login --token vpcli_...
The production URL defaults to https://ventilatepro.com. Use --url only for
local development, staging, or self-hosted VentilatePro servers.
- Confirm the local setup:
ventilatepro mcp doctor
- Add the stdio server to Codex:
codex mcp add ventilatepro -- ventilatepro-mcp
For JSON-based MCP clients, use:
{
"mcpServers": {
"ventilatepro": {
"command": "ventilatepro-mcp",
"args": []
}
}
}
If the client cannot find ventilatepro-mcp, run where ventilatepro-mcp on
Windows or which ventilatepro-mcp on macOS/Linux and use the full path as the
command.
If the hidden token prompt is awkward in your terminal, use either:
ventilatepro auth login --token-prompt-visible
or pipe the token through stdin:
printf '%s' "$VPCLI_TOKEN" | ventilatepro auth login --token-stdin
See the hosted install guide at https://ventilatepro.com/exam/cli/, the HVAC
calculation reference at https://ventilatepro.com/exam/cli/calculations/, the
machine-readable index at https://ventilatepro.com/llms.txt, plus
docs/commands.md, docs/auth.md,
docs/api.md, and docs/releasing.md in this repo.
Read Revit geometry with ventilatepro air-distribution geometry ROOM_ID --json; list availability with ventilatepro air-distribution rooms --project PROJECT_ID --json. See Air Distribution commands.
Air Distribution now supports ceiling grids, terminal placement, project product editing,
and reviewed supply-layout proposals through both CLI and MCP. Start with
vp air-distribution editor layout get --room ID --json; see
editor commands.
Analyse a layout with vp air-distribution analysis run --room ID --fidelity SIMPLE --json
(ASHRAE throw/ADPI, immediate) or --fidelity FFD --yes --wait (fast fluid dynamics,
minutes), then read slices with vp air-distribution analysis field --room ID --run RUN_ID.
MCP agents use vp_air_distribution_analysis; see
analysis commands.
Plumbing: ventilatepro plumbing show --project ID --json opens the shared fixture/system inventory. Use schemas show plumbing to discover reviewed import, CPC calculation, network adoption and report workflows. See commands.
Metadata
Release files for ventilatepro-cli 0.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ventilatepro_cli-0.8.1.tar.gz | 337.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ventilatepro_cli-0.8.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 650.0 kB
Release files / ventilatepro_cli-0.8.1.tar.gz
| Download URL | ventilatepro_cli-0.8.1.tar.gz |
|---|---|
| Size | 337.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b74666a8a9cf00bf416a9a27536658ea947e783d129951debf9076aa71a75566
|
|
BLAKE2b-256 checksum How to use checksums |
fd3c99d2a94591600626a9bce0ba50153bb0dbc2a3ab435054bef99e59bd4ff5
|
| 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 3, 2026.
Transparency logRelease files / ventilatepro_cli-0.8.1-py3-none-any.whl
| Download URL | ventilatepro_cli-0.8.1-py3-none-any.whl |
|---|---|
| Size | 312.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bd6c0286a579d8c6df9b6b2c90932f44c193611ce89213b575cde54d7139ed1d
|
|
BLAKE2b-256 checksum How to use checksums |
8315c71c6d92444aaa3a089949335ce044e31f967364992ade2fd44ff2b69b37
|
| 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 3, 2026.
Transparency log