SkillAgentSearch skills...

horizun-revit-mcp

Open-source Model Context Protocol (MCP) server for Autodesk Revit 2023-2027: typed BIM automation, family authoring, interoperability and Power BI.

Install / Use

claude mcp add HorizunGroup -- npx -y github:HorizunGroup/horizun-revit-mcp

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

74/100

Category

Automation

Supported Platforms

Claude Code
Claude Desktop
OpenAI Codex

Horizun Revit MCP — an MCP server for Autodesk Revit

ci codeql release Revit 2023–2027 MCP registry license Apache-2.0

Point Claude — or Codex, Cursor, Cline, Windsurf, any MCP client — at a running Autodesk Revit and let it read and write the model, under one contract:

A command never reports work it did not verify.

Every typed write is re-read from the model after the commit, so a silent rollback becomes an error instead of a false success, and counts come from reading the model again rather than from calls that did not throw. Free and open source, Apache-2.0. Part of the Horizun Hub ecosystem.

What this is. The bridge: transport, safety guards and a generic tool surface over the Revit API, for Revit 2023 through 2027. Organisation-neutral by design — no company's standards, catalogues or naming rules are compiled in; where a command needs one, it is an input supplied at call time.

What this is not. A methodology. The standards, audit criteria and reporting that turn these commands into delivery workflows live in Horizun Hub. This repository is the socket; the Hub is what plugs into it.

What you can ask it

Ordinary language on the left; what the bridge actually does on the right. None of it is scripted in advance — the client picks the tools.

| You ask | What happens | | --- | --- | | "Which Revit are you talking to, and which document is open?" | horizun_health answers with the Revit year and build, the add-in version and commit, and the active document — or an explicit "none is active", never a blank title. | | "How many walls on Level 2, with type and area, including the linked models?" | horizun_query_model walks the host and every loaded link, projects the parameters you named, and reports coverage plus which link each row came from. Unloaded links are listed, not silently skipped. | | "Set the keynote of these 40 types to D021-A2-A14." | horizun_set_keynote first reports the blast radius — how many instances that type change touches — then writes, then re-reads every one. | | "Add Level 3 at 7.20 m, a floor plan for it, and put it on a new sheet." | horizun_create_elements and horizun_manage_views compose in one ordered transaction group; a failure anywhere rolls the whole graph back. | | "Split these multilayer walls into one wall per material layer." | horizun_split_multilayer_walls re-hosts doors and windows on the structural layer — and refuses curved walls instead of straightening them. | | "Export the floor plans to PDF and the model to IFC." | horizun_export runs a dry run first and afterwards attributes only the changed, non-empty files that match what you asked for. | | "Build me a parametric RFA from this profile." | horizun_create_family compiles a loadable family from an RFT — parameters, formulas, types, reference planes, dimensions, solids and voids — then verifies both the file and the loaded project family. | | "Do X — and there is no tool for X." | The failed typed call returns fallback.allowed: true only when nothing was written. The client then writes minimal Revit Python for horizun_execute_python, whose results are labelled self-reported, never host-verified. |

Ninety per cent of the design is in the "no". A slab whose hosted families cannot be put back rolls back alone; a clash count of zero is a zero you can trust; an ambiguous request is refused with a reason instead of resolved by guessing.

// horizun_health, abbreviated
{
  "status": "healthy",
  "horizun_version": "0.9.0",
  "horizun_commit": "ced1aa1",
  "built_from_clean_tree": true,
  "revit_version": "2026",
  "revit_build": "20250406_1515(x64)",
  "no_active_document": false,
  "active_document": { "title": "TORRE-A-EST.rvt", "is_workshared": true },
  "open_document_count": 3
}

Install

Windows, at least one Revit 2023–2027, and Revit closed. Everything else the installer checks for you, and it changes nothing when it refuses.

1 · Get the installer and verify it

Download horizun-mcp-<version>-setup.exe and SHA256SUMS.txt from the latest release, then check the hash before running anything:

$exe  = Get-Item .\horizun-mcp-*-setup.exe
$want = (Select-String -Path .\SHA256SUMS.txt -Pattern 'setup.exe').Line.Split(' ')[0]
if ((Get-FileHash $exe -Algorithm SHA256).Hash -ieq $want) { "OK - matches the published hash" }
else { "STOP - it does not match. Do not run it." }

(Get-FileHash prints upper case and the file lists lower case, which is why the comparison above is case-insensitive rather than something to eyeball.)

Every release also carries a payload manifest.json, package-hashes.json, an SBOM and one live verification report per supported Revit year.

Read this before you run it. The 0.9.0 installer is deliberately published without a publicly trusted code-signing certificate, so Windows SmartScreen and Revit may warn about an unknown publisher. That is expected, and it is why the hash above exists. Public signing becomes a mandatory release gate at 1.0.0 under the code signing policy. The intended open-source service is: Free code signing provided by SignPath.io, certificate by SignPath Foundation. The application is under review; this is not a claim that the current download is already signed.

If you would rather have the script do the same checks, one paste verifies the complete SHA-256 against that same GitHub release, installs quietly and finishes client registration:

irm https://raw.githubusercontent.com/HorizunGroup/horizun-revit-mcp/main/install-release.ps1 | iex

Download it first and pass -Version <tag> to pin a release, or -Interactive for the Setup wizard. Quiet, latest and automatic client completion are the defaults.

2 · Let it register your MCP client

Installation and registration are one user action. The installer deploys a different add-in binary per installed Revit year plus the MCP server, then hands off to a helper that waits for Claude or Codex to close rather than editing the configuration underneath a running client — it makes timestamped backups, preserves every other MCP entry, and verifies what it wrote. Durable status lives in %LOCALAPPDATA%\Horizun\install-status.json, and Start-menu shortcuts can resume or inspect it.

<details> <summary>Manual registration, if you ever need it</summary>

Use the exact path the installer printed. It is already expanded for your machine, which matters: %LOCALAPPDATA% is expanded by cmd.exe and not by PowerShell, so a config written with the variable silently points nowhere.

# after closing Claude Code — user scope makes it available across projects
claude mcp add --scope user horizun-revit -- "C:\Users\<YOU>\AppData\Local\Programs\Horizun\MCP\server\horizun-mcp.exe"

# after closing Codex
codex mcp add horizun-revit -- "C:\Users\<YOU>\AppData\Local\Programs\Horizun\MCP\server\horizun-mcp.exe"
# Codex timeouts — %USERPROFILE%\.codex\config.toml
[mcp_servers.horizun-revit]
command = 'C:\Users\<YOU>\AppData\Local\Programs\Horizun\MCP\server\horizun-mcp.exe'
args = []
startup_timeout_sec = 120
tool_timeout_sec = 600
// Cursor, Cline, Windsurf, Claude Desktop and other MCP clients
{
  "mcpServers": {
    "horizun-revit": {
      "command": "C:\\Users\\<YOU>\\AppData\\Local\\Programs\\Horizun\\MCP\\server\\horizun-mcp.exe"
    }
  }
}

TOML literal strings (single quotes) take Windows paths as they are; JSON needs every backslash doubled. Raise your client's tool timeout if it has one: a model scan or a batch open holds Revit's UI thread for minutes, and a 60-second default gives up on work that is still running — the bridge then looks broken while it is merely busy.

</details>

3 · Start Revit and check

Two things to expect on the first start, neither of them a fault:

  • Revit can show a Security dialog when the publisher is not already trusted — after verifying the build, choose Always Load. It can open on a monitor you are not looking at: a Revit that seems stuck on startup with the CPU idle is often this dialog hiding.
  • With a document open, a Horizun Hub tab appears in the ribbon. Its Estado del puente button answers "is this working, and which version?" without leaving Revit.

From your MCP client, horizun_health answers the same with the commit included. A contract hash mismatch means one half is on an older build: close Revit and install again.

Build from source instead

Nothing prebuilt is downloaded or run: everything is compiled on your machine against the Revit already installed. You need the .NET SDK — 8+ for Revit 2023–2026, 10+ to build for 2027.

git clone https://github.com/HorizunGroup/horizun-revit-mcp
cd horizun-revit-mcp
powershell -ExecutionPolicy Bypass -File .\install.ps1

It finds every Revit by its own RevitAPI.dll, builds the add-in for each of those years and the MCP server, installs both, and reads every installed binary back to prove it landed — stamped commit plus SHA-256 against what was staged. A build failure changes nothing; a failure after that rolls back through its undo ledger and tells you the exact state you are in. To update: git pull, close Revit, run it again.

Or hand the whole thing to an agent — paste this into Claude Code or Codex in any folder:

Clone https://github.com/HorizunGroup/horizun-revit-mcp into this folder, read its
AGENTS.md, and follow the install procedure there. Install and verify the binaries,
then confirm the automatic completion status. Do not edit an active client's
configuration; let the installed helper finish registration after that client exits.

Both pick up AGENTS.md automatically once they are inside the repository. It carries the prerequisites, the failure modes and the two surprises worth knowing before the first Revit start.

Architecture

Horizun Revit MCP architecture: an MCP client speaks stdio to the Horizun server, which forwards over a token-authenticated named pipe to the Revit add-in, which dispatches onto Revit's UI thread

  • Horizun.Revit — the add-in. App (IExternalApplication) starts a named-pipe server and publishes a discovery file; Dispatcher crosses each request onto Revit's UI thread via ExternalEvent; Guard and Reconcile are the "cannot lie" commit contract; commands live under Commands/.
  • Horizun.Server — the MCP server. The wire format is hand-rolled from the open MCP spec, with no third-party SDK: it discovers the pipe, speaks MCP over stdio and forwards to the plugin. Schemas and behavioural effects live in one shared contract, so tools/list answers with Revit closed without drifting from the add-in. I

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars9
CategoryAutomation
Updated1d ago
Forks0

Languages

C#

Security Score

92/100

Audited on Aug 16, 2026

1 low