
OpenMEP duct sizing
io.github.samarmstrongPublished by GitHub account samarmstrongv0.2.0Updated Oct 24, 2026
Deterministic HVAC duct sizing at a fixed or Manual D friction rate; grades existing ducts.
Overview
A local MCP server that lets an assistant size HVAC ducts deterministically at a fixed or Manual D friction rate and grade existing duct sections.
- What you can do
- Size a single duct from CFM, role, airflow type and an optional existing round, rectangular or oval section, returning a recommended standard round diameter, velocity, friction and an ok/undersized/oversized grade for existing ducts. Size a whole duct network of terminals, segments, fittings and equipment linked by references, returning per-segment CFM, role, recommendation and grade. With fan static pressure and lengths, derive the Manual D design: available static, total effective length, friction rate and governing paths. Report findings such as missing CFM, disconnected terminals, dangling references, mixed systems, undersized or oversized runs and friction rates outside 0.06–0.18. Both
- When to use it
- Useful when an assistant needs preliminary HVAC duct sizing or a check of whether existing ducts are undersized, oversized or adequate, including whole-network layouts with a blower's static pressure. Results are meant as preliminary sizing for an engineer to review.
- Requirements
- Runs locally over stdio via npx from the npm package @openmep/mcp; requires Node.js 24+. No editor, CAD host, account, API key or network access is needed.
Installation
In SourceWeft
- Open OpenMEP duct sizing in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
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.
Claude Code: claude mcp add openmep -- npx -y -p @openmep/mcp openmep-mcp.
Requires Node.js 24+. Transport: stdio.
Tools
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
Source: packages/mcp/README.md at commit 4f57471
Tools
0Version history
2- v0.2.0LatestOct 7, 2026
- v0.1.0Sep 23, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts