# The New Engineer — HVAC (remote · thenewengineer.com)

IFC models: duct networks, circuits, pressure drop. EN 12828 vessels, EN 378, Swiss refrigerants.

- Trust score: 77/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `thenewengineer.com`: 77/100 (this document), [markdown](https://verifymcp.io/servers/com-thenewengineer-hvac/thenewengineer.md), [page](https://verifymcp.io/servers/com-thenewengineer-hvac/thenewengineer)

## Channel facts

- Endpoint: `https://thenewengineer.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.3.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 32/100
  - 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 12926 tokens (~994/item across 13 items; 11 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (27% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).
  - Supports UI / widget rendering.

## Install

### How do I install the The New Engineer — HVAC MCP server?

The New Engineer — HVAC is a hosted endpoint at https://thenewengineer.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-thenewengineer-hvac 'https://thenewengineer.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-thenewengineer-hvac": {
      "url": "https://thenewengineer.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-thenewengineer-hvac": {
      "type": "http",
      "url": "https://thenewengineer.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-thenewengineer-hvac]
url = "https://thenewengineer.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-thenewengineer-hvac": {
      "type": "remote",
      "url": "https://thenewengineer.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-thenewengineer-hvac --url 'https://thenewengineer.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-thenewengineer-hvac:
    url: "https://thenewengineer.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-thenewengineer-hvac": {
      "Transport": "http",
      "Url": "https://thenewengineer.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-thenewengineer-hvac -t streamable-http -u 'https://thenewengineer.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-thenewengineer-hvac": {
      "type": "http",
      "url": "https://thenewengineer.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 77, 0)

- [security] Tool “apply_ifc_rules” rewrote its description, which is the text the model reads
- [security] Tool “read_ifc_overview” rewrote its description, which is the text the model reads
- [security] Tool “trace_duct_circuits” rewrote its description, which is the text the model reads

### 2026-11-03 (score 77, 0)

- [security] Tool “trace_duct_circuits” rewrote its description, which is the text the model reads

### 2026-11-02 (score 77, 0)

- [security] Tool “read_ifc_overview” rewrote its description, which is the text the model reads
- [security] Tool “trace_duct_circuits” rewrote its description, which is the text the model reads

### 2026-10-31 (score 77, 0)

- [security] Tool “apply_ifc_rules” rewrote its description, which is the text the model reads

### 2026-10-30 (score 77, 0)

- [security] Tool “apply_ifc_rules” rewrote its description, which is the text the model reads
- [security] Tool “read_ifc_overview” rewrote its description, which is the text the model reads
- [cosmetic] “read_ifc_overview” added an optional parameter “families”
- [cosmetic] “read_ifc_overview” added an optional parameter “property_catalogue”

### 2026-10-24 (score 77, 0)

- [security] Tool “apply_ifc_rules” rewrote its description, which is the text the model reads
- [security] Tool “read_ifc_overview” rewrote its description, which is the text the model reads
- [security] Tool “trace_duct_circuits” rewrote its description, which is the text the model reads

### 2026-10-23 (score 77, 0)

- [security] Stability: 0.97 → pass
- [security] Tool “apply_ifc_rules” rewrote its description, which is the text the model reads
- [security] Tool “read_ifc_overview” rewrote its description, which is the text the model reads
- [security] Tool “trace_duct_circuits” rewrote its description, which is the text the model reads

### 2026-10-22 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (11)

### `size_expansion_vessel` (~1213 tokens)

DETERMINISTIC: the same inputs always give the same result — from any AI, on any day. Figures come from the standard's tables and formulas, never from a language model's estimate. Every step is auditable.

Size the expansion vessel and pressurisation of a closed heating or
    chilled-water circuit to EN 12828: static height, minimum pressure p0,
    fill pressure pa, final pressure pe, expansion volume, water reserve,
    nominal vessel volume with the standard vessel to buy, safety valve
    setting together with the minimum it must not fall below, pressure
    class of the lowest equipment, intermediate vessel when needed.

    Heights become pressures through the real density of the fluid, at the
    temperature that matters for each: the coldest for p0, the design
    temperature for the valve and the lowest point. Water and glycols
    therefore give different figures for the same height.

    Use it whenever the user asks to size or check an expansion vessel,
    pressurisation unit, pre-charge pressure or safety valve — in any
    language: vase d'expansion, maintien de pression, Ausdehnungsgefäss,
    Druckhaltung, vaso di espansione, vaso de expansión.

    Needs the installation water volume and THREE heights, all measured
    from the point where the expansion vessel connects to the network:
      - the highest point of the installation, above it;
      - the lowest point, usually below it (negative) or level with it;
      - the safety valve, which always sits on the heat generator or
        chiller. If the user does not know it, it is assumed 1 m above
        the vessel connection, and the result says so.
    Ask the user for the volume and the three heights before calling.
    NEVER invent a height: if the lowest point or the valve height is
    unknown, omit it. The result is then marked provisional and lists
    the questions to ask. Build your answer on `answer_outline`: it
    carries the assumptions, the questions and the link to the website,…

Input parameters:

- `design_temperature_c`: Hottest the fluid ever gets, standstill included. Omit: the warmer of flow and return in heating, 40 °C in cooling.
- `filling_temperature_c`: Temperature at which the circuit is filled, °C. Omit: 10.
- `flow_temperature_c`: Flow temperature, °C. Omit: 80 in heating, 6 in cooling.
- `fluid`: Heat-transfer fluid: 'eau' (Water), 'meg' (MEG), 'mpg' (MPG), 'tyfocor' (TYFOCOR L (MPG)). Omit: plain water.
- `glycol_pct`: Glycol concentration in %, ignored for water. Defaults to 30 %.
- `highest_point_above_unit_m`: Height of the REAL highest point of the installation - the top air vent - above the point where the expansion vessel connects to the network, in metres. Taken as given: no margin is added. NEEDED FOR…
- `installation`: 'chauffage' for heating, 'refroidissement' for cooling / chilled water. Omit: heating.
- `installation_volume_l` (number, required): Total water content of the closed circuit, in litres: pipes, emitters, generator, buffer tank. THIS IS THE WATER, NOT THE VESSEL. If you know the vessel and want the water content, this is the wrong…
- `language` (string): The user's language, for labels and alerts.
- `lowest_point_from_unit_m`: Height of the REAL lowest point of the installation - the lowest drain - relative to the point where the expansion vessel connects to the network, in metres. NEGATIVE when below it, 0 when the vessel…
- `min_temperature_c`: LOWEST temperature the fluid can reach, °C — including a breakdown, not just normal running. Omit and the filling temperature is used; in a glycol mix the calculation already goes down to the frost p…
- `minimum_required_pressure_bar`: Pressure the installation requires at the pressurisation unit whatever the height - against cavitation at a pump suction, for instance. p0 never falls below it. Omit: zero.
- `pressurisation`: Type of pressurisation: 'statique' (Pressure-maintained by gas cushion (Statico)), 'compresseur' (Compressor-driven (Compresso)), 'pompe' (Pump-driven (Transfero)). Omit: gas-cushion vessel.
- `return_temperature_c`: Return temperature, °C. Omit: 60 in heating, 12 in cooling.
- `safety_valve_from_unit_m`: Height of the safety valve relative to the point where the expansion vessel connects to the network, in metres. The safety valve always sits on the heat generator (boiler, heat pump) or chiller - tel…
- `safety_valve_setting_bar`: Safety valve setting in bar, one of the standard settings. Omit to take the smallest standard setting that works here. A setting below the minimum the installation needs is raised, and the result say…

### `water_content_from_vessel` (~874 tokens)

DETERMINISTIC: the same inputs always give the same result — from
any AI, on any day. Figures come from the standard's tables and
formulas, never from a language model's estimate. Every step is
auditable.

Deduce the water content of an installation from the expansion vessel
already fitted.

WHAT THIS IS FOR. Refurbishment, and site visits with no drawings.
Sizing a new vessel, a new pump or a new generator needs the water
content, and on an existing installation nobody has it: the drawings
are lost, or never matched what was built. The vessel on the wall is
the one piece of evidence still standing, and it was chosen from that
very figure.

ASK THE OPERATOR FIRST. Whoever filled or refilled the system knows
the real figure — from the meter, the filling station, or the
maintenance log — and that figure beats any deduction. This tool is
what you use when nobody knows, or to check a number that looks
wrong. It gets the conversation moving; it does not close it.

HOW. The sizing calculation is run backwards: a trial water content is
fed to the EN 12828 sizing, the resulting vessel is compared with the
one on site, and the trial is adjusted until they match. The formulas
are never rewritten in reverse — the answer cannot contradict the
direct calculation, because it is the same code.

WHAT THE ANSWER IS WORTH. A vessel is picked from a catalogue range:
a 200 L unit covers everything needing between 141 and 200 L. The
result is therefore A RANGE, never a single figure. And an oversized
vessel — common — will overstate the content. Compare the range with
what you see on site; it does not replace looking.

It also assumes the vessel was sized correctly in the first place. If
it was not, the deduction inherits the mistake — which is itself
worth knowing: a range far from what the installation plainly holds
means the vessel is wrong, and that is a finding in its own right.

Input parameters:

- `fill_temperature_c`: Temperature the water was at when the system was filled, °C. 10 °C is the usual mains temperature indoors. Ask, or state the assumption.
- `flow_temperature_c`: Design flow temperature, °C. In heating this is the highest the water reaches.
- `fluid` (string): Heat-transfer fluid: 'eau' (Water), 'meg' (MEG), 'mpg' (MPG), 'tyfocor' (TYFOCOR L (MPG)).
- `glycol_percent` (number): Glycol concentration in %, ignored for water.
- `installation` (string): 'heating' or 'cooling'.
- `max_temperature_c`: HIGHEST temperature the fluid can reach, °C — in extreme conditions, running OR stopped. In heating it is the flow temperature. In cooling it is not the regime at all: a stopped chiller lets the wate…
- `min_temperature_c`: LOWEST temperature the fluid can reach, °C — including a breakdown, not just normal running. Indoors, 10 °C. Outdoors, 0 °C, or down to the freezing point of the glycol mix. This is what fixes the re…
- `pressurisation` (string): How pressure is held: 'static' for a plain membrane vessel, 'compressor' for a compressor unit (Compresso and the like), 'pump' for a pump unit. A compressor or pump unit holds the pressure itself, s…
- `return_temperature_c`: Design return temperature, °C.
- `static_height_m`: Height of the highest point above the vessel, in metres. Required for 'static' only — a compressor or pump unit does not use it.
- `valve_setting_bar`: Safety valve setting, bar. Required for 'static' only.
- `vessel_volume_l` (number, required): Nominal capacity of the expansion vessel actually installed, in litres — read it on the nameplate.

### `check_refrigerant_switzerland` (~1321 tokens)

DETERMINISTIC: the same inputs always give the same result — from any AI, on any day. Figures come from the regulation's annexes and thresholds, never from a language model's estimate. Every step is auditable.

Swiss refrigerant regulation check (ORRChim / ChemRRV annex 2.10, OFEV synthesis
of May 2026, rules adopted 29.10.2025) plus refrigerant data from EN 378-1
Annex E: GWP (AR4, the ORRChim basis), ODP, LFL, safety class, practical limit.

Returns, for a given refrigerant and installation: the date from which machines
using it can no longer be placed on the Swiss market (import from 01.01.2027,
sale to third parties from 01.07.2027), the date from which filling with virgin
refrigerant is banned, the period when only reclaimed refrigerant may be used,
and the date from which all filling is banned.

SCOPE: heating, air conditioning, building cooling and process cooling,
data centres included. NOT food refrigeration, cold rooms or deep freezing:
those are a different trade, and the tool declines them instead of
answering.

Use it whenever the user asks about a refrigerant in Switzerland — its GWP / PRG,
flammability, whether a chiller, heat pump, split, VRF or cold room using it may
still be sold or refilled — in any language: fluide frigorigène, Kältemittel,
refrigerante, refrigerant, R-32, R-410A, R-290, CO2, NH3...

The answer depends on the installation. The regulation distinguishes:
use (building cooling, food refrigeration medium / low temperature / combined /
deep freezing, process cooling, heat pump mainly for heating, ice rink), cooling
capacity Q0K or heating capacity Q0H, self-contained (factory-built packaged
unit) or not, split, direct expansion (incl. VRF), secondary coolant loop
(chilled water / brine), air-cooled condenser and refrigerant charge.
THIS TOOL ANSWERS ONE QUESTION ONLY: may the refrigerant still be sold and
refilled in Switzerland, and until when. It says NOTHING about safety in the
room - charge limits, machine room, detection, ventil…

Input parameters:

- `air_cooled_condenser`: True if heat is rejected through an air-cooled condenser (heat pump: its air heat exchanger). Omit if unknown.
- `application`: Use of the installation: 'climatisation_batiment' (building cooling, incl. reversible heat pump used mainly for cooling), 'froid_alimentaire_positif' (food/perishables, use temp ≥ 0 °C), 'froid_alime…
- `cooling_capacity_kw`: Peak useful cooling capacity Q0K, kW. Omit if unknown.
- `direct_expansion`: True if the refrigerant evaporates directly in the room units / evaporators (DX, incl. VRF); False if it cools a water or brine loop. Omit if unknown.
- `evaporator_count`: Number of evaporators.
- `family_if_unlisted`: ONLY with gwp_if_unlisted: 'naturel' (natural), 'stable' (contains any HFC/PFC — e.g. R-454B, R-454C, R-455A), 'hfo' (only HFO and/or natural components).
- `gwp_if_unlisted`: ONLY if a previous call said the refrigerant is not in the database: its GWP (AR4) from the manufacturer's datasheet, given by the user.
- `heat_recovery`: True if rejected heat is recovered.
- `heating_capacity_kw`: Peak useful heating capacity Q0H, kW (heat pumps). Omit if unknown.
- `language` (string): The user's language, for labels. French or English text; translate for de/it/es.
- `odp_if_unlisted`: ONLY with gwp_if_unlisted: its ODP (0 for HFC/HFO).
- `refrigerant` (string, required): Refrigerant designation as the user wrote it: 'R-32', 'R410A', 'R1234ze', 'CO2', 'propane'…
- `refrigerant_charge_kg`: Total refrigerant charge, kg. Omit if unknown.
- `refrigerant_circuit_count`: Number of refrigerant circuits.
- `secondary_circuit`: True if cold is distributed through a secondary coolant loop (chilled water, glycol, brine). Omit if unknown.
- `self_contained`: True if 'autonome': factory-built circuits in a frame/casing and no gas-carrying part connected on site (packaged chiller, monobloc heat pump, rooftop). Omit if unknown.
- `simultaneous_heating_cooling`: True for simultaneous heating and cooling with at least 2 air heat exchangers.
- `split`: True for a split system (indoor/outdoor units linked by refrigerant lines laid on site). Omit if unknown.

### `check_en378_zones` (~1066 tokens)

DETERMINISTIC: the same inputs always give the same result — from any AI, on any day. Figures come from the standard's tables and formulas, never from a language model's estimate. Every step is auditable.

EN 378 applied to BUILDING projects, volume by volume.

An installation does not occupy one room but several: the machine, the rooms
crossed by refrigerant lines, the rooms served by indoor units. Each volume
is classified on its own — access category (a/b/c) and location class (I–IV)
— and each classification calls for its own measures. The tool answers per
volume, never as a single verdict.

It returns, for every volume: its classification and why, the charge limit
from Tables C.1 and C.2 of EN 378-1 (with the C.2 formula computed when the
table calls for it), whether the charge exceeds it, the EN 378-3 measures
that follow, the applicable texts (EN 378-1 to -4, EN IEC 60079-10-1, SUVA
66139 and 2153) and the ventilation flow rates.

FOUR CONFIGURATIONS COVER ALMOST EVERY BUILDING PROJECT. Bring the user's
case back to one of them wherever possible:
  machine_en_local_technique   chiller or heat pump, all refrigerant inside
                               the machine, standing in a plant room -> c III
  enceinte_accessible_fermee   all refrigerant inside a walk-in ventilated
                               enclosure that stays closed even for
                               maintenance -> the enclosure is c III, the
                               room around it carries no requirement
  enceintes_inaccessibles      one or more units, each in a manufacturer's
                               non-accessible ventilated enclosure -> TWO
                               analyses: the enclosure in operation (class
                               IV, the manufacturer sizes and justifies it,
                               ask him for the enclosure ventilation), and
                               the plant room with the enclosure OPEN for
                               maintenan…

Input parameters:

- `acces_local`: Access category of the plant room. Omit: 'c', authorised persons only.
- `acces_locaux_desservis`: Access category of the rooms crossed or served: 'b' for offices, laboratories, workplaces; 'a' for hotels, schools, shops, hospitals, homes.
- `charge_kg`: Refrigerant charge of the largest circuit, in kg.
- `configuration`: How the installation is laid out. Omit if unknown: the tool returns the question to ask.
- `language` (string): The user's language. Texts are in French: translate them.
- `pose`: How the indoor unit is mounted: on the floor, wall, window or ceiling. Formula C.2 depends on it.
- `refrigerant` (string, required): Refrigerant as the user wrote it: 'R-32', 'R410A', 'R290', 'R717', 'propane'…
- `surface_local_desservi_m2`: Floor area of that room, in m². Formula C.2 needs it; without it the tool returns the minimum area required instead.
- `volume_enceinte_m3`: Volume of the ventilated enclosure, in m³.
- `volume_local_desservi_m3`: Volume of the smallest room crossed or served by an indoor unit, in m³.
- `volume_local_m3`: Volume of the plant room, in m³.

### `read_ifc_overview` (~1238 tokens)

CALL THIS FIRST, as soon as the user gives you a token - a link
thenewengineer.com/ia/XXXX pasted in the conversation - BEFORE you
answer anything, even when the user only says they will choose or do
something themselves. It answers within seconds, while the network
graph is still being built - use that time to think.

THE USER WANTS TO CHOOSE THE UNITS THEMSELVES (« let me select »,
« je vais choisir les centrales »): the place to do it is the
control page. Go on through the steps below until trace_duct_circuits (token
only) returns 'lien_centrales', and GIVE THEM THAT LINK. Never tell
them to select « in the interface » without the link: there is no
other place to select.

A MODEL ALREADY TREATED: if the answer carries
'designation_existante', an earlier session already designated the
units and fans of this model. Reuse it: skip step 2, go straight to
trace_duct_circuits, and show the user the designation you reused.
Post new rules only if the user asks to start again.

THE CIRCUITS OF A MODEL IN FOUR CALLS:
  1\. read_ifc_overview - this call: the types of the model.
  2\. apply_ifc_rules - your rules. Give air handling units,
     monoblocs and ventilation casings the role
     centrale_de_traitement_d_air, fans the role ventilateur, and
     smoke exhaust fans (and smoke compensation fans) the role
     ventilateur_desenfumage, exactly these words - and ONLY to
     equipment that holds a fan.
     Coils, heat exchangers, filters, silencers, dampers, VAV boxes
     are pieces of the network, not units - BUT a family NAMED as a
     unit (CTA, AHU, UTA, monobloc, caisson, centrale) is one, even
     when its type names its heat recovery: « BG_CTA_Echangeur à
     plaques » is an air handling unit. Its answer lists under
     'equipements' every unit and fan of the model.
  3\. trace_duct_circuits with ONLY the token - it computes nothing,
     walks the networks from every unit and fan, and either returns
     the COMPLETE list of units and fans with the control p…

Input parameters:

- `families`: Leave EMPTY on the first call. Then, to read EVERY property of some families, their 'famille' names from the first answer - at most 12 per call. Only the detail asked for comes back.
- `property_catalogue`: True lists every property of the model once, by property set, with an example value - to find which 'PropertySet.Property' holds a size or a flow. Only the catalogue comes back.
- `token` (string, required): The token from the link the user pasted — the last part of thenewengineer.com/ia/XXXX. Valid 48 hours.

### `apply_ifc_rules` (~1518 tokens)

Turn what you read in the overview into rules the tool replays on
EVERY piece of the model, including the ones you were never shown.

NOT NEEDED ON A MODEL ALREADY TREATED: when read_ifc_overview returns
'designation_existante', the units and fans are already designated -
reuse them. Posting rules REPLACES that designation entirely: do it
only when the user asks to start again, or when the designation
plainly contradicts what they say.

THIS IS HOW THE TOOL LEARNS A MODEL. read_ifc_overview gives you one
line per family of types, not one per piece. You answer with
RULES on those groups, and this tool applies them to the three thousand
pieces. You never give a verdict piece by piece: the result stays
deterministic because a program, not you, does the matching.

THEN READ THE ANSWER BACK, AND EXPECT TO POST AGAIN. The answer gives
every group with the role your rules gave it and how many pieces that
is. A rule that is too wide shows up on one line — « Gaine
rectangulaire cadree, 471 pieces, centrale_de_traitement_d_air » is a
rule that turned every duct into an air handling unit. Narrow it and
post again. Calling this tool costs nothing and may be repeated as
often as you need.

WHAT NEEDS A ROLE, AND WHAT DOES NOT. Plain ducts and fittings need
none: they are network by nature, and the answer marks them
segment_ou_raccord so you can see at a glance whether a rule caught
them by mistake. What needs a role is everything else — air handling
units, fans, fire dampers, balancing dampers, silencers, louvres,
diffusers — plus whatever must be kept OUT of the network, such as
access zones, equipment plinths or damper motors.

THREE ROLE NAMES ARE FIXED, because circuits start from them: give
air handling units, monoblocs and ventilation casings the role
centrale_de_traitement_d_air, fans the role ventilateur, and SMOKE
EXHAUST fans - including fans that bring compensation air for smoke
exhaust - the role ventilateur_desenfumage - exactly these words. A
smoke fan runs only i…

Input parameters:

- `rules` (object, required): Your rules, as a JSON object. The only required key is roles.liste: an ORDERED list, FIRST MATCH WINS, most specific first. Each entry is {"role": "a_name", "si_un_de": [conditions]} and may also car…
- `token` (string, required): The model token, from ifc_upload_result or from the link the user pasted.

### `read_ifc_networks` (~598 tokens)

DETERMINISTIC: networks come from geometry, not from a guess. The
same model always gives the same networks, from any AI, on any day.

Read the networks of an IFC model already uploaded by the user.

WHAT A NETWORK IS. A set of parts that touch each other, cut at
equipment: a pump, an air handling unit, a chiller separates two
systems, so the tool does not run through them. This is measured on
the geometry — you cannot and need not check it.

WHAT YOU GET, PER NETWORK
  state          'homogeneous' — a system exists, some parts were
                 mis-named by the modeller; the tool will correct them.
                 'undetermined' — no system can be read. THIS is where
                 you are useful.
                 'assigned' — the user or you already named it.
  system         the dominant name, when there is one
  part_dominante the share of named parts carrying it
  equipements_voisins  the NAMES of the machines this network is
                 connected to. An undetermined network starting from
                 'AHU-Supply-L2' names itself — but only you can see it.
  systemes_existants   every system name already in the model

WHAT TO DO NEXT. Propose a name for each undetermined network, using
the neighbouring equipment, the existing system names, and anything
the user told you about the project's naming scheme. Ask the user for
their list of planned systems if you do not have it. Then call
name_ifc_networks.

WHAT NOT TO DO. Do not rename a network the report calls
'homogeneous' unless its name plainly contradicts the equipment it is
connected to — and then say why. Do not invent a network: you cannot
see the geometry, and the tool already did that work.

CALL THIS AGAIN WHENEVER THE STATE MAY HAVE MOVED. The token stays
valid for 48 hours and is a key, not a snapshot: every call recomputes
and returns the model AS IT IS NOW. The user works in the browser
between your messages — renaming networks, assigning parts by hand,
accepting or refusing correct…

Input parameters:

- `token` (string, required): The token from the link the user pasted. It looks like the last part of thenewengineer.com/ia/XXXX. The user gets it on the model page, button 'share with my AI'. Valid 48 hours, one model.

### `name_ifc_networks` (~331 tokens)

Apply the names you propose, and get back the updated report.

THE NAMES ARE YOURS, THE NETWORKS ARE NOT. You are naming what the
tool measured; you are not changing what it measured. Nothing you
send here alters a network, a part, or a correction.

WHAT COMES BACK. The updated report, a 3D link where the user sees
your names in colour, and a link to the corrective Dynamo script that
writes the systems back into Revit.

ALWAYS GIVE THE USER THE 3D LINK, and say plainly which names are
yours. Networks are deterministic; names are a proposal. A user who
cannot tell the two apart cannot check your work.

AFTER THE USER HAS BEEN IN THE 3D VIEW, call read_ifc_networks again
with the same token before saying anything about the model. They may
have renamed what you proposed, assigned parts by hand, or refused a
correction — and only a fresh read shows it.

Input parameters:

- `names` (object, required): One name per network, keyed by its 'rang' as a string, for instance: {'3': 'SUPPLY L2', '7': 'EXTRACT KITCHEN'}. Only include the ones you are naming; the others are left untouched.
- `reasoning`: One short line per name, saying what it is based on — the neighbouring unit, the project's naming scheme, an existing system. Shown to the user, who decides.
- `token` (string, required): The same token used with read_ifc_networks.

### `trace_duct_circuits` (~4356 tokens)

THE CIRCUITS THE FANS OF A MODEL ARE SIZED ON, found without anyone
clicking and computed on the pressure-drop page, where the user
confirms types and flows and reads the pressure drops.

THE USER WANTS TO PICK THE UNITS THEMSELVES: call this tool with ONLY
the token right away, and give them 'lien_centrales' - the control
page, where a click turns a unit red and 'Send to my AI' sends you
their choice.
Without that link they have nowhere to select.

ONLY UNITS AND FANS ARE EXCHANGED. The tool never sends you system
names: it sends the air handling units and fans your rules found,
each with what the network walk finds connected to it - geometry,
not names. A unit is equipment with a FAN - air handling unit,
monobloc, ventilation casing, fan. Coils, heat exchangers, filters,
silencers, dampers are network pieces: if one shows up in the list
(often as 'dans_le_reseau_de' another unit), your rules are too
wide - fix them with apply_ifc_rules before choosing. But a family
NAMED as a unit (CTA, AHU, monobloc) is one, whatever its type says.
A LOW 'raccordement' MOSTLY MEANS MISSED UNITS: look for families
named CTA, AHU, monobloc, caisson that got no unit role, and add
them before sending the user anywhere.

FIRST THE CHECK AND THE LIST, THEN THE CALCULATION. Called with only
the token, once your rules are posted with apply_ifc_rules, it
computes NOTHING and bills nothing. It walks the networks from every
unit and fan and measures the share of the model's air pieces they
reach ('raccordement'). Two answers:
  \- CONNECTED (half of the air pieces or more): the COMPLETE list of
    units and fans ('centrales_et_ventilateurs', each with its
    number of connected networks) and 'lien_centrales', the
    CONTROL PAGE ('Network check' in English, 'Contrôle des
    réseaux' in French) - not a view-only page: every unit in its colour
    with its networks, where the user checks and CORRECTS the
    connections (identify or remove a unit, add a virtual AHU,
    connect or separat…

Input parameters:

- `all_networks`: True computes EVERY unit and fan of the list: the longest path of each network connected to them. Networks connected to no unit are not computed - the user traces them on the calculation page, or giv…
- `end_guid`: The END of ONE circuit the user wants - a terminal, a louvre, any duct. With start_guid: the circuit from start to end. Alone: the tool finds the start of that network, as for network_guid. Only this…
- `excluded_guids`: Parts to close, by GlobalId. Closing a part cuts the walk there: whatever was only reached through it leaves the survey. Use it when the network visibly runs too far - through a plenum shared with an…
- `flow_m3h`: Flow rate leaving ONE starting part, m3/h - so give it with start_guid. Over the whole model it would give every unit the same flow, and the call refuses it when there are several: compute the model…
- `max_velocity_m_s`: Design velocity, in m/s, 0.5 to 12. It sets the flow rate at the start of each circuit when flow_m3h is not given, and the flow after each branch: between two branches, the length-weighted average ve…
- `network_guid`: ANY piece of the network the user wants computed - a duct, a terminal, a fitting - when the model has no unit, when the user's unit was not recognised, or when they simply point at the network. The t…
- `preliminary_design`: True when the network is still at a PRELIMINARY stage - not sized yet. Every stretch then carries what its own ducts carry at the design velocity (the flow may rise along the circuit, which a sized n…
- `start_guid`: Leave EMPTY in general. The piece the AIR LEAVES FROM - an air handling unit, a fan, or the duct end where the air enters: circuits are computed from it. A GlobalId from 'equipements' in the answer o…
- `start_role`: Rarely needed. Computes every piece your rules gave this role - centrale_de_traitement_d_air or ventilateur -, like all_networks restricted to one role, and only on a model of 50 air networks or fewe…
- `token` (string, required): The model token, from ifc_upload_result or from the link the user pasted.
- `unit_name`: Only when the user asks about ONE unit or fan: its name, or a part of it - « CTA 12 », « AHU-Supply-L2 ». The tool looks it up among EVERY piece your rules gave the role centrale_de_traitement_d_air…
- `units`: Air handling units or fans to compute, by name - from 'centrales_et_ventilateurs' of the list answer, or from 'equipements' of apply_ifc_rules. For each network connected to each of them, the longest…

### `open_ifc_upload` (~173 tokens)

Show an upload box in the conversation where the user can drop an
IFC file (.ifc) of a building services model (HVAC, plumbing,
heating). The file goes straight from the user's browser to
thenewengineer.com - you never see it.

CALL THIS when the user wants to analyse an IFC model and has not yet
given you a link from thenewengineer.com. Then tell the user to drop
the file in the box.

When the upload is done, the box posts a message with a token. Use
that token with read_ifc_networks. If no message arrives and the user
says the upload is done, call ifc_upload_result with the upload_token
returned here.

Prototype: files up to the anonymous size limit of the site.

### `ifc_upload_result` (~57 tokens)

Where the upload stands. When `state` is `depose`, `token` is the
token to pass to read_ifc_networks.

Input parameters:

- `upload_token` (string, required): The upload_token returned by open_ifc_upload.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-thenewengineer-hvac/thenewengineer#diagnostics

## Score history

- 2026-11-05: 77
- 2026-11-04: 77
- 2026-11-03: 77
- 2026-11-02: 77
- 2026-11-01: 77
- 2026-10-31: 77
- 2026-10-30: 77
- 2026-10-29: 77
- 2026-10-28: 77
- 2026-10-27: 77
- 2026-10-26: 77
- 2026-10-25: 77
- 2026-10-24: 77
- 2026-10-23: 77
- 2026-10-22: 77
- 2026-10-21: 76
- 2026-10-20: 76
- 2026-10-19: 76
- 2026-10-18: 75
- 2026-10-17: 75
- 2026-10-16: 74
- 2026-10-15: 74
- 2026-10-14: 73
- 2026-10-13: 73
- 2026-10-12: 72
- 2026-10-10: 72
- 2026-10-04: 69
- 2026-10-03: 68
- 2026-10-02: 67
- 2026-10-01: 63

## Common questions

### What is the The New Engineer — HVAC MCP server?

The New Engineer — HVAC is an MCP server listed in the public MCP registry as com.thenewengineer/hvac. IFC models: duct networks, circuits, pressure drop. EN 12828 vessels, EN 378, Swiss refrigerants. This page covers its hosted endpoint (https://thenewengineer.com/mcp).

### Is the The New Engineer — HVAC MCP server safe to use?

The New Engineer — HVAC scores 77 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the The New Engineer — HVAC MCP server expose?

The New Engineer — HVAC exposes 11 tools: size_expansion_vessel, water_content_from_vessel, check_refrigerant_switzerland, check_en378_zones, read_ifc_overview, and 6 more. Their descriptions and schemas cost roughly 12,745 tokens of context every time the server is loaded.

### Does the The New Engineer — HVAC MCP server require authentication?

No. We connected to The New Engineer — HVAC without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the The New Engineer — HVAC MCP server still maintained?

The New Engineer — HVAC is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://thenewengineer.com/mcp
- Website: https://thenewengineer.com/ai
- Changelog RSS feed: https://verifymcp.io/servers/com-thenewengineer-hvac/thenewengineer.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-thenewengineer-hvac/thenewengineer.json
- HTML version of this page: https://verifymcp.io/servers/com-thenewengineer-hvac/thenewengineer
