Atlas / MCP servers / sharafutdinovdi / revit-model-mcp

revit-model-mcpCAUTION

mcp/sharafutdinovdi/revit-model-mcp

MCP server for live Autodesk Revit models: query, aggregate and inspect by default, act only behind opt-in gates

Verdict
CAUTION
Grade
B
Trust score
81 /100
Exposed tools
—
Transport
stdio
License
MIT
Stars
5
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Model MCP for Autodesk® Revit® connects an MCP client such as Claude Desktop or Claude Code to a live Revit project. Ask questions about the model, check it, and change it in plain language. Every change is one named undo entry in Revit, and read-only mode is one switch away.

[](https://github.com/sharafutdinovdi/revit-model-mcp/actions/workflows/ci.yml) [](https://github.com/sharafutdinovdi/revit-model-mcp/releases/latest) [](https://pypi.org/project/revit-model-mcp/) [](https://scorecard.dev/viewer/?uri=github.com/sharafutdinovdi/revit-model-mcp) [](LICENSE)

Claude Desktop runs on a Mac and connects to Revit 2026 on a Windows workstation. Actions are enabled in this recording.

What happens in the recording

  1. "What model is open in Revit right now?" The client reads the document, levels and room counts.
  2. "Which level
Read from source at commit 1ae98e69bab7OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add revit-model-mcp --env REVIT_MCP_TOKEN=${REVIT_MCP_TOKEN} -- uvx revit-model-mcp==0.9.1
03

Trust audit

CAUTIONgrade B · trust 81/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (6 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (18)

HIGHPrompt injection · review.misleading_scope · CWE-94, CWE-1427
<listing:description>
act only behind opt-in gates
Why it matters. The package description claims actions require opt-in gates, but AGENTS.md states 'Actions are enabled by default; every change is one named undo entry', directly contradicting the advertised behavior.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
build/install/Installer.cs:84
new Property("HTTP_URL_PREFIX", "http://127.0.0.1:53110/") { Secure = true },
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.release-please-manifest.json
.release-please-manifest.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
build/winget/New-WingetManifests.ps1:18
$installerDirectory = Join-Path $PSScriptRoot '../../output'
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CONTRIBUTING.md:147
Open `http://127.0.0.1:8000/revit-model-mcp/`.
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/manual-test-plan.md:172
- [ ] **5.3a HTTP health and tool call**: with HTTP enabled, `curl -i http://127.0.0.1:<port>/health` returns `200` and a JSON body whose `commands` is a non-empty list. Then run one tool (for example
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/transport.md:157
`show urlacl` must list the exact prefix, for example `http://127.0.0.1:53110/`, for the Windows user that runs Revit.
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/transport.md:170
For a per-machine MSI, pass `HTTP_ENABLED=1 HTTP_URL_PREFIX="http://127.0.0.1:53111/"` to `msiexec /i <package.msi>` from an elevated prompt.
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
server/revit_model_mcp/artifact_download.py:39
image = base64.b64decode(encoded, validate=True)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
server/revit_model_mcp/artifact_download.py:67
content = base64.b64decode(encoded, validate=True)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
server/revit_model_mcp/ssh_host.py:119
result = json.loads(base64.b64decode(output, validate=True))
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
server/revit_model_mcp/ssh_host.py:166
state = json.loads(base64.b64decode(package["state"], validate=True))
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
server/revit_model_mcp/ssh_host.py:252
base64.b64decode(output.strip(), validate=True).decode("utf-8-sig")
LOWObfuscation / stealth · obf.decode_then_exec · CWE-506, CWE-94
server/tests/test_revit_channel.py:1304
b64decode( ... subprocess.
Why it matters. decodes a payload and executes it
LOWPrompt injection · review.misleading_scope · CWE-94, CWE-1427
AGENTS.md
every change is one named undo entry
Why it matters. The README implies all changes are trivially reversible via Revit undo, but AGENTS.md reveals that save, sync, and close-with-loss operations require explicit confirmation tokens, making them not as easily undone as the README suggests.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWInventory / provenance · mcp.no_tools_extracted · CWE-1104
server/server.json
Why it matters. the tool list is enumerated at runtime by tools/list, not declared in source
Fix. the page says so rather than showing an empty table
INFOInventory / provenance · inv.oversize · CWE-1104
docs/screenshots/revit-model-mcp_claude-desktop.gif
docs/screenshots/revit-model-mcp_claude-desktop.gif
Why it matters. 3269471 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 1ae98e69bab7full audit observations/trust-audit/mcp-server/sharafutdinovdi__revit-model-mcp.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-111ae98e69bab7CAUTIONB81first audit
05

Questions

What is the revit-model-mcp MCP server?

MCP server for live Autodesk Revit models: query, aggregate and inspect by default, act only behind opt-in gates

Is revit-model-mcp safe to connect to an agent?

With care. The audit graded it B (81/100) and found 18 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does revit-model-mcp need?

It reads REVIT_MCP_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does revit-model-mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as revit-model-mcp.

How current is this page?

The grade is for one exact copy of the source (1ae98e69bab7), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement