mcpField
O
OpenMEP duct sizing

OpenMEP duct sizing

Local
github.com/samarmstrongScience & Education0Updated 3w ago

About OpenMEP duct sizing

OpenMEP duct sizing is an MCP server for agents and HVAC engineers that sizes duct sections and grades existing ones using fixed equal-friction or Manual D rates. It accepts airflow as an input and returns preliminary results for engineering review.

Key features

  1. 01Size individual duct sections
  2. 02Analyze connected duct networks
  3. 03Apply Manual D friction rates
  4. 04Grade existing ducts
  5. 05Flag network and sizing issues

Use cases

  1. 01Choose duct sizes from design airflow
  2. 02Review existing duct dimensions
  3. 03Check a network against fan static pressure

MCP support

Exposes `size_duct` and `size_duct_network` tools to MCP clients. The tools are read-only and return sizing recommendations, grades, and findings.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"samarmstrong-openmep": {
"command": "npx",
"args": [
"-y",
"@openmep/mcp"
]
}
}
}
Run commandnpx -y @openmep/mcp

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@openmep/mcp0.2.0

Tools

2

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
cfmnumberYesAirflow the run carries, CFM.
roleenumNomain (at equipment), branch (serves several terminals), or runout (one terminal). Default main.main | branch | runout
existinganyNoExisting section to grade: { diameterIn } for round, or { shape: rect|oval, widthIn, heightIn }.
airflowTypeenumNoSystem, which sets the velocity cap. Default supply.supply | return | exhaust | outside-air

Details

From the project README

@openmep/mcp

An MCP server that gives any agent OpenMEP's deterministic HVAC duct sizing. No editor, CAD host, account, or network access: the agent describes the ducts, the engine sizes them.

{
  "mcpServers": {
    "openmep": { "command": "npx", "args": ["-y", "-p", "@openmep/mcp", "openmep-mcp"] }
  }
}

Claude Code: claude mcp add openmep -- npx -y -p @openmep/mcp openmep-mcp. Requires Node.js 24+. Transport: stdio.

Tools

ToolInputReturns
size_ductcfm, optional role (main/branch/runout), airflowType (supply/return/exhaust/outside-air), existing section ({diameterIn} or {shape: rect|oval, widthIn, heightIn})Recommended standard round diameter, velocity, friction; for an existing section its circular equivalent and ok/undersized/oversized
size_duct_networkitems: terminals with requiredCfm, segments (optionally with existing and lengthFt), fittings (optionally equivalentLengthFt), equipment, linked by connectedItemRefs; optional fan (externalStaticInWg, componentLossesInWg)Every loaded segment's CFM, role, recommendation, and grade; with fan, the Manual D design (available static, total effective length, friction rate, governing paths); findings for missing CFM, disconnected terminals, dangling references, mixed systems, undersized and oversized runs, friction rate outside 0.06–0.18

Both tools are read-only and idempotent. Invalid input comes back as a tool error naming the field (NetworkInputError [invalid-item]: items[2].requiredCfm: ...) so the model can correct it.

Example prompt that works in a fresh Claude Code session with only this server:

I have a furnace feeding a supply trunk that tees into two runouts: bedroom 1 needs 120 CFM, bedroom 2 needs 90 CFM, and the living room is fed off the trunk end at 200 CFM. All drawn as 6 inch round. One return grille in the hall at 410 CFM on a 10 inch drop. Is anything undersized?

The agent builds the network in one size_duct_network call and reports 7, 6, and 8 in runouts, an 11 in trunk, and a return drop just under size at 10 in.

Engineering basis and limits

Equal friction at 0.08 in. w.g./100 ft, or at the Manual D rate derived from the blower's available static pressure when fan and lengths are given, with role-based velocity caps per system, rounded up to standard round diameters; see @openmep/hvac-domain for the formula, sources, and what is excluded (fitting losses, static pressure summation, fan selection). Airflow is a design input the server never estimates. Treat results as preliminary sizing for an engineer to review.

The server uses the official MCP TypeScript SDK and speaks the initialize-handshake protocol revisions (through 2025-11-25), which current clients support.

Library

import { createOpenMepServer } from "@openmep/mcp";
await createOpenMepServer().connect(transport); // any MCP server transport

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.