MCP tools

HVAC Builder is an MCP server at https://hvacbuilder.app/api/mcp. Add it as a connector in any MCP-capable agent and approve it once; or send an API key as a bearer token. Every tool carries annotations: read-only tools compute or read and a client may run them without asking; the others create, and the ones marked destructive update or delete. Everything the app can do is a tool, or excused by name in the code — a guard holds every API route to one or the other.

ToolWhat it does
list_component_kindsEvery component kind with its typed ports, required spec fields and a worked example.
solve_system, solve_saved_systemSolve a graph at a design point. The same shape as POST /api/solve; a graph may nest saved or published systems. solve_saved_system solves one of your saved systems by id without sending its graph back at all — the boundary defaults to the one it was saved at, so sweeping a condition costs one field per point instead of the whole design.
rate_ieerRate a machine the way AHRI 340/360 rates a packaged unit: four load points, weighted. Returns the figure in W/W and in Btu/(W·h), the unit a datasheet quotes.
simulate_annualRun a system flat out against a weather year and return the dashboards' numbers.
save_system, list_saved_systems, get_saved_system, update_saved_system, delete_saved_systemYour saved systems, with their category and control strategy. Update is partial; a provided graph replaces the whole; ifUpdatedAt holds it to the revision it read, as the REST update does.
save_component, list_saved_components, get_saved_component, update_saved_component, delete_saved_componentYour component library — the parts the app's Add component window offers under My components: one component each, a catalog pick or a spec the solver can use. They count against the plan's saved items.
arrange_layoutLay a graph out in rows as the published examples are: the air path left to right, each compressor under its evaporator, the water side in front, nothing overlapping. Positions are cosmetic — the solver reads none — and nothing is solved or charged.
list_buildings, get_building, save_building, update_building, delete_building, simulate_buildingYour buildings and the examples, in full and editable — rooms with loads, schedules and humidity bounds, blocks with couplings, terminals and priorities — and a building run by id or inline, returning the result rather than a job id.
search_catalog, get_catalog_item, list_refrigerants, refrigerant_tablesReal equipment for a design: compressors slim by refrigerant and text (thousands of maps), the other kinds in full; one item with its coefficients and curves; the refrigerants the backend solves; and a refrigerant's saturation line — dew and bubble temperature, pressure, latent heat and saturated densities every kelvin — off the tables the refrigerant pages print.
list_product_categories, search_productsWhat an installation is built from, as families of categories: the ones the builder models and the products it lists without modelling them — valves, expansion joints, isolators, sensors, boards, filters — with the attributes a product listing states, typed, in a language you name. The vocabulary of a product item for import_catalog_items; and the published products themselves, by category, text, market, supplier or one attribute value, each with the id an accessory's catalogRef names.
match_suppliers, request_quotes, match_building_suppliers, request_building_quotes, match_accessory_suppliers, request_accessory_quotes, my_quote_requestsPreview which suppliers could build a design or a building's machines, or supply a design's typed-in accessories; send them the request, and read what you have sent.
my_published_systems, publish_system, update_published_system, unpublish_systemSuppliers: offerings in full — publish one (nesting your own systems, the examples, or another supplier's offering that allows reuse; published flattened), replace it, withdraw it.
list_weather_datasets, list_tmy_cities, fetch_tmy_weather, import_weather_csv, create_weather_dataset, delete_weather_datasetYour weather library: real TMY years for the listed cities, an hourly CSV mapped by column names (the same rules as POST /api/weather/import, the skipped-row report included), a labelled synthetic year — and deleting one of your own, which is marked destructive.
list_supplier_presets, get_supplier_presetPublished supplier systems, filterable by category; one offering in full.
my_accountIdentity, tier, limits and tokens.
fit_compressor_mapTurn a published performance table into AHRI 540 coefficients — capacity, power, mass flow, part-load steps — with fit quality per point. The fit takes the order the table's levels determine: four or more levels of each temperature fit the full cubic; a hermetic's sheet with three condensing levels is fitted quadratic in condensing temperature, the unfitted coefficients zero, and form says so.
import_catalog_itemsSuppliers: bulk-load up to 100 listings per call.
my_vendor_profile, update_vendor_capabilities, my_leadsSuppliers: the profile with published counts; the capability profile that routes quote requests (kinds, system categories, envelope, refrigerants, regions, product categories); the RFQ leads.

The OAuth flow: the client registers itself (RFC 7591, public clients, PKCE), sends you to approve it, and receives an access token good for 8 hours with a refresh token that rotates on use and lapses after 90 days. A re-authorisation replaces that client's grant; grants are listed and revoked under Connections & API keys. Neither a key nor a token can approve a further connection, change your plan or reach admin tools.