RvtMcp について
RvtMcpは、MCPクライアントと実行中のAutodesk RevitをつなぐローカルC#ブリッジで、Revit 2022~2027に対応します。一般的なBIM作業向けの型付きツール、設定可能なツールセット、Revit内でのC#実行機能を備え、操作は端末内で完結します。
主な機能
- 01Revit作業向けの型付きツール
- 02ツールセット設定と読み取り専用フィルター
- 03最大20件の一括実行
- 04Revit内でのC#コード実行
- 05ToolBakerによる個人用ツール作成
- 06Revit 2022~2027対応
活用シーン
- 01モデル要素、ビュー、パラメーターの検索
- 02シート、集計表、注釈の作成や変更
- 03反復作業のパターンをツール化
- 04データをローカルに保ったRevit作業の自動化
MCP 対応
stdioでMCPサーバーを実行し、Revitのバージョンに応じてローカルTCPまたは名前付きパイプ経由で実行中のRevitアドインに接続します。MCPクライアントにRevitツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
rvt-mcp
Autodesk Revit 用の MCP ゲートウェイ — エージェント向けローカルツール、オプションの個人用ベイクループ
English · Tiếng Việt · 简体中文 · 日本語
概要
Revit 向けの初期のオール C# MCP 実装 — 2026 年 3 月から調査・実装を継続しています。
rvt-mcp は、MCP クライアントと実行中の Revit セッションをつなぐローカルブリッジです。.NET 8 サーバーは stdio 経由で MCP 通信を行い、Revit の各年版(2022~2027)向けの軽量なアドインが Revit 内で動作し、localhost TCP(≤2024)または名前付きパイプ(≥2025)経由で接続されます。マシンの外へデータが送信されることはなく、エンドツーエンドで C# を使用し、ツールの境界での長さの単位はミリメートルです。詳細はARCHITECTURE.mdをご覧ください。
エージェントは、一般的な Revit 作業に対応する型付きツール群、それ以外のあらゆる処理に対応する C# の拡張手段、さらに繰り返しのパターンを個人用ツールにするオプション機能(ToolBaker)を利用できます。共有ランタイムから始めて、その上に独自のツールを追加できます。ファミリエディタでの作成は、現時点では対象外です。
インストール
v1.2.0: セットアップとClaude Desktop MCPB · NuGet(サーバーのみ) · MCP Registry。検証記録と残りの対応状況をご覧ください。
AI エージェントに、使用するクライアントへのインストールを任せましょう。 このWindowsマシン上でPowerShellを実行し、ローカルファイルを編集できるエージェント(Claude Code、Codex、Cursorなど)を使用してください。ローカルツールを使えないチャットセッションは使用しないでください。インストールに使うエージェントと、Revitツールを使用するクライアントは異なっていてもかまいません。エージェントはAGENTS.mdに従い、変更内容を事前に確認して適用前に確認を求めます。それでも、UI操作の承認やアプリの再起動が必要になる場合があります。
Claude Desktopの場合は、次の内容を貼り付けてください。
Install rvt-mcp for Claude Desktop on this Windows machine.
First read https://github.com/bimwright/rvt-mcp/blob/master/AGENTS.md.
Configure only Claude Desktop, not other clients. Inspect existing installations,
preview changes and ask before writing. Tell me if I need to use the UI or restart an app.
別のクライアントを使う場合は、Claude Desktopをそのクライアント名に置き換えてください。**Claude CodeとClaude Desktopは別の対象です。**インストーラーのオプションclaudeはCodeを、claude-desktopはDesktopを指します。
**または、インストーラーを自分で実行します(Claude Desktop、設定を直接編集)。**Revitを終了し、Claude Desktopを完全に終了して(トレイのプロセスも含む)、PowerShellで次を実行してください。
$tag = (Invoke-RestMethod https://api.github.com/repos/bimwright/rvt-mcp/releases/latest).tag_name
$dir = "$env:TEMP\RvtMcp.Setup-$tag-win-x64"
Invoke-WebRequest "https://github.com/bimwright/rvt-mcp/releases/download/$tag/RvtMcp.Setup-$tag-win-x64.zip" -OutFile "$dir.zip"
Expand-Archive "$dir.zip" -DestinationPath $dir -Force
powershell -ExecutionPolicy Bypass -File "$dir\install.ps1" -WhatIf -Client claude-desktop
# Review the preview before applying:
powershell -ExecutionPolicy Bypass -File "$dir\install.ps1" -Client claude-desktop
これにより、検出されたすべてのRevit 2022~2027にアドインがインストールされ、rvt-mcpがClaude Desktopのみに登録されます(設定は事前にバックアップされます)。Claude Codeを使う場合は-Client claudeを指定してください。複数のクライアントを指定する場合は、コンマ区切りのリストを使用してください。-Clientを省略すると、検出されたすべてのクライアントに接続されます。-Client noneを指定すると、設定は変更されません。サーバーは%LOCALAPPDATA%\Bimwright\rvt-mcp\server\current\rvt-mcp.exeにあります(クライアントごとの手順。Desktop classic/MSIXのパスを含む)。
**動作確認:**AIクライアントを再起動し、Revitでモデルを開き、リボンからMCPを起動して(アドイン → RvtMcp)、エージェントにrevit_get_current_view_infoを呼び出すよう依頼してください。アクティブなビューの名前と種類が返されるはずです。
**アップグレード:**Revitとゲートウェイクライアントを終了し、製品データフォルダーをバックアップしてから、先にアンインストールせずに新しいインストーラーをそのまま実行してください。設定とToolBakerのデータは保持されます。MCPBを使用している場合は-Client noneを指定し、同じリリースのセットアップと拡張機能を更新してから、再接続する前にDesktopの設定と権限を確認してください。アップグレード手順をご覧ください。アンインストール:uninstall.ps1 -Yesを実行すると、アドインとサーバーが削除されます。-Purgeを追加しない限り、個人データは保持されます。クライアントの登録情報も削除するには、先にinstall.ps1 -Uninstall -Client autoを実行してください。
**v0.8.1またはv0.6.xからのアップグレード:**これらのバージョンでは、設定とToolBakerのデータは%LOCALAPPDATA%\RvtMcp\に保存されています。v1.0.0では%LOCALAPPDATA%\Bimwright\rvt-mcp\が使われ、インストーラーによって古いフォルダーが移動されます。実行中の古いサーバーがフォルダーをロックするため、先にRevitとすべてのMCPクライアントを終了してください。PowerShellでTest-Path "$env:LOCALAPPDATA\RvtMcp"を実行して確認してください。インストーラーがBoth … existまたはCould not move …と表示して停止した場合、移動した内容は元に戻されています。設定とToolBakerのデータが保存されているフォルダーを残し、もう一方は削除せずに名前を変更し(例:RvtMcp.bak)、それを使用していたクライアントを終了してから、インストーラーを再実行してください。
**Claude Desktop拡張機能(MCPB、任意):**エージェントによるインストールでは、上記の設定を直接編集する方法が既定です。拡張機能/設定UIを使用する場合は、-Client noneを指定してSetupを実行し、Desktopの拡張機能UIから.mcpbをインストールしてください。どちらか一方を選び、両方は使わないでください。-Client noneを指定しても、既存の手動登録は削除されません。Setupと同じ選択済みリリースのバンドルを使用してください。ゲートウェイやアドインはインストールされず、そのリリースの正確なサーバービルドが必要です。署名状況はリリースノートで確認してください。MCPBのインストールと設定をご覧ください。
動画
rvt-mcp の動作を紹介するコミュニティ動画です。動画内のインストール手順がこの README より古い場合があります。上記の手順に従ってください。
- ChatGPT Astra を Revit に接続 | 実際のプロジェクトで AI による変更をテスト — Revit Mentor
- Revit + GPT 6 Astra を探る — BIM Pure
- GPT-6 Astra が 14 分で Revit の家を構築 — Archi Vlogs
ツール
以下の件数は v1.2.0 リリースに対応しています。以降の開発ビルドでは、カタログが異なる場合があります。
| モード | ツール数 | 備考 |
|---|---|---|
| 新規インストール | 237 | install.ps1 は rvtmcp.config.json に "toolsets": ["all"] を初期設定します |
ベアの rvt-mcp.exe | 50 | query + create + view + meta |
--toolsets all | 237 | カタログ全体 |
all + アダプティブベイク | 240 | 提案のライフサイクルに関するツールを 3 つ追加 |
件数には、個人がベイクしたツールは含まれません。インストーラーは、rvtmcp.config.json で toolsets がまだ設定されていない場合にのみ、初期設定値を書き込みます。独自のリストはアップグレード後も保持され、キーを削除するか、独自の CSV を設定すると、ベアサーバーは 50 ツールの構成に戻ります。読み取り専用フィルターは、混在するツールセット内の読み取りも含め、ReadOnly=true の個別ツールを対象とします。ファイルを書き込む可能性があるツールは、既定の出力がインラインでも除外されます。
| ツールセット | 対象 |
|---|---|
query | 表示、選択、フィルター、統計、パラメーター、関連要素、ワークセット、グループ/アセンブリ |
create | グリッド、レベル、部屋、線/点/面ベースの要素、グループ |
view | ビューの作成、シートレイアウト用ヘルパー、画像のキャプチャ、トリミング/縮尺 |
meta | バッチ実行(最大 20 件)、複数の Revit ターゲット、最近使用したモデル、プロジェクト情報、未使用要素の削除(MVP)、メッセージ、send_code、ローカルの失敗記録と操作ステータス |
lint | ビューの命名パターン、事務所プロファイルの検出、警告の概要 |
schedule | 集計表の一覧表示/作成、フィールド、数式、データ |
families | ファミリのロード/アンロード、タイプ、インスタンス、監査、.rfa のエクスポート(プロジェクト側) |
modify | 要素の操作/色変更、パラメーターの設定、タイプの変更、ワークセットの割り当て |
delete | ID による削除 |
annotation | タグ、テキスト、寸法、領域、キーノート、チェック |
export | PDF/DWG/IFC/NWC のヘルパー、部屋データ、および関連するエクスポートツール |
mep | システム、コネクタ、ネットワーク、端末/器具の配置など |
graphics | ビューフィルター、オーバーライド、表示/フェーズ |
toolbaker | ベイクしたツールの一覧表示/実行。提案ツールはアダプティブが有効な場合のみ |
sheets | シート、タイトルブロック、改訂、番号の振り直し、ビューポートレイアウト |
materials | マテリアル、外観、割り当て、数量拾い |
geometry | BBox、計測、干渉チェック、体積/面積、… |
rooms | 部屋/エリア/スペース、仕上げ、区画線 |
links | Revit/CAD リンク、座標監査、座標の取得/公開 |
parameters | プロジェクト/共有パラメーター |
organization | 保存済み選択セット、ビューテンプレート |
workflows | 干渉チェック/監査/シート/数量拾い形式の複合ワークフロー |
structural | 柱、梁、基礎、鉄筋、荷重、… |
セッションの健全性
セッションの開始時に、必要に応じて対象の Revit インスタンスを選択してから、revit_health() を呼び出します。デフォルトではオフラインのままで、--read-only と開いているモデルがない状態でも動作します。revit_health(check_updates=true) は、読み込まれているゲートウェイとアドインを公式の最新安定版と明示的に比較します。根拠が不足している場合は unknown のままになります。update_guidance に従ってください。更新の提案が許可されるのは、bundle_update_proposal_allowed=true を伴う prepare_update の場合のみです。ヘルスチェックによって、更新のインストール、モデルのクローズ、プロセスの再起動が行われることはありません。Revit がモーダル状態でも応答できます。ドキュメントのフィールドは最後に UI を観測したときの情報であり、document_observed_utc の日時が付与されます。現在のドキュメントや書き込み可能な状態であることを確認するものではありません。再接続後は、最新の initialize.serverInfo と、tools/list にあるヘルスツールのランタイムメタデータ/スキーマ/アノテーションを client_verification と照合してください。サーバーからクライアントのキャッシュ更新状況を確認することはできません。
引数エラー
必須パラメーターが欠けている呼び出しは実行されません。INVALID_ARGUMENT とともに invalid_arguments(missing、did_you_mean を伴う unknown、received、expected)が返されます。パラメーター名は大文字と小文字が区別されます。また、ツールによって snake_case を使うものと camelCase を使うものがあります。did_you_mean に従ってください。パラメーターではないキーがあっても呼び出しは中断されません。そのキーは無視され、結果の _ignored_arguments に一覧表示されます。変換できない値を渡した場合も、An error occurred invoking '<tool>'. が返されます。正確な原因はサーバーの stderr に出力されます。
send_code、ToolBaker、リボン、言語
revit_send_code_to_revit(デフォルトで有効)は、適合する型付きツールがない場合に、Revit 内で C# 本文をコンパイルして実行します。--read-onlyまたは--disable-send-codeを指定すると利用できなくなります。docs/send-code.md を参照してください。階段については docs/stairs-workflow.md を参照してください。- ToolBaker:
revit_list_baked_tools/revit_run_baked_toolの使用には--toolsets toolbakerが必要です。適応型ベイク(デフォルトでは無効の--enable-adaptive-bake)は、呼び出しの繰り返しからツールを提案します。承認するまでツールは追加されません。ベイクは Revit 内でコンパイルされるため、Visual Studio は不要です。docs/bake.md を参照してください。 - リボン: 接続を開始または停止できます。また、History を開いて過去の呼び出しを検索し、Issues を確認できます。完了時の Toasts(デフォルトで有効)も切り替えられます。
- UI 言語: アドインの UI は 15 言語に対応し、Revit の UI 言語に従います。リボンのスライドアウトにある Language ボタンから変更できます。ボタンを押すと Settings → General → Language が開きます(
BIMWRIGHT_UI_LANGUAGEが設定されている場合は引き続きそちらが優先されます)。ツール名とペイロードは英語のままです。docs/localization.md を参照してください。
アクティビティトーストがある理由
トーストは単なる装飾ではなく、作業状況を知らせるものです。次の3つの実用的なニーズから生まれました。
- チャットを見続けなくても済むようにします。 実際のMCPワークフローでは、AIエージェントが長時間作業していても、Revit上ではほとんど状況が分からないことがあります。エージェントが作業しているか確認するためだけにチャットを見続けるのは、注意力の無駄です。アクティビティカードは完了したツール呼び出しを報告するため、ユーザーは更新の合間に別の作業へ移れます。
- マルチタスクを支援します。 メンテナーは複数のデスクトップアプリケーションを並行して開発し、繰り返しテストしています。コンパクトな通知により、すべてのチャットを表示したままにしなくても、各セッションを追いやすくなります。
- エクスペリエンスを最新化します。 Revit側から状況を知らせることで、自動化の応答性と分かりやすさが向上し、モーダルダイアログで作業を中断することもありません。
トーストが知らせるのはツールの結果であり、実行中のツール内部の進捗や、タスク全体の完了ではありません。連続した結果は1つのカードにまとめられます。また、Revitが最小化されている場合や、モーダルダイアログで操作が妨げられている場合、通知は待機することがあります。トーストはエージェントの作業を確認することの代わりにはなりません。
各カードにはゲートウェイとRevitの年(例:rvt-mcp 2022)、最新のツール、Success · Failed · Captureの件数が表示されます。キャプチャのプレビューは、カード上に少なくとも5秒間表示されます。
意図的にホバーするとアクティビティタイムラインが開き、最新の結果3件と、それぞれのローカル完了時刻(HH:mm:ss)が表示されます。カード内の過去の呼び出しを見るには、上にスクロールしてください。新しい結果が届くと、短いスライドインアニメーションとともに下部へ追加されます(行が上に移動し、新しい行がフェードインして結果を示すドットが弾むように表示されます。モーションを減らす設定が有効な場合、これらのアニメーションはありません)。過去の呼び出しを読んでいる間は、表示位置はそのままです。タイムライン内をクリックすると、閉じずに内容を読めます。カードのそれ以外の部分をクリックするとHistoryが開きます。この機能はブランディングをオフにしていても使えます。要約には上限が設定され、機密情報は除去されます。メモリ内にのみ保存され、カードを閉じると消去されます。スクリプトのオブジェクト/配列には件数が表示され、未完了の調査は未完了であることが明示されます。サーバーローカルのツールは、このUI変更によってトーストの表示対象にはなりません。
通知はデフォルトでオンで、オフにできます。Settings → Toastで、待機時間(10/20/30/60秒、デフォルトは20秒)とShow branding(デフォルトでオフ)を選択します。後者を有効にすると、ホバー時にワードマークが表示されます。選択は即座に反映され、Revitを再起動しても保存されます。アクティビティの通知を受け取るために、ブランディングを表示する必要はありません。
位置: Settings → Toastで、Horizontal alignment(Left/Right)とVertical alignment(Top/Bottom)を個別に選択できます。デフォルトは左上です。変更は開いているカードに反映され、即座に保存されます。また、角の位置を変更すると、保存済みのドラッグ位置はクリアされます。Allow dragging the cardをオンにすると、タイトル行を使ってカードを移動できます。通常のクリックでは引き続きHistoryが開きます。ドラッグをオフにしても保存済みの位置は保持され、再度オンにするとその位置に戻ります。Reset positionを選択すると位置がクリアされます。位置はRevitウィンドウを基準に保存され、モニターの作業領域内に収まるように維持されます。下部に固定されたカードは上方向に広がり、スペースがない場合は反対側に切り替わります。アニメーションはWindowsのアニメーション設定に従います。保存に失敗した場合は、選択内容がそのセッション中は有効なまま、設定の下にエラーが表示されます。最新ツールの行またはタイムラインの行にホバーすると、サニタイズ済みの結果、Success/Failed、完了時刻、および取得できる場合は実測時間が表示されます。複数のAutodeskアプリケーション間でトーストを連携させる機能は、対象外です。
プロンプト
v1.0.0 では 6 つの MCP プロンプトを利用できます。/mcp__rvt-mcp__revit_<name>(Claude Code)またはプロンプトメニュー(Claude Desktop)から選ぶと、エージェントはすでに利用できるツールを使ってスクリプトに従います。
revit_getting_started— 開いているモデルの概要を把握します(読み取り専用。既定の設定で動作します)。revit_drawing_layout—requestを指定して、1 枚のシートのビューポートを配置します。最初に実際のシート空間上の位置を読み取り(revit_get_viewport_geometry)、配置をあなたと合意し、ドライランの計画を表示します(revit_align_viewports)。あなたの確認後にのみ移動し、その後、結果を読み戻します。query,sheets,view,metaが必要です。読み取り専用モードでは、状況を報告して提案するだけです。revit_change—changeを指定します。関連性を調査し、このリクエストに必要な最小限の範囲を合意してから、書き込み前に具体的な提案を確認します。その後、結果を読み戻し、会話に理由を記録します。query,metaが必要です。send_codeがなくても動作します。読み取り専用モードでは、調査と提案の段階で停止します。証拠が欠けている場合や不完全な場合は「未確認」のままです。読み戻しは間接的な変更をすべて網羅するものではなく、記録は永続的な変更データベースではありません。revit_model_audit— 警告、ファミリ、パージ候補のドライランを含む健全性監査です(workflows,families,lint,metaが必要です)。revit_pre_issue_check— 発行前に、解決済みのシートを確認します(sheets,view,annotation,lint,metaが必要です)。シート番号/ID、明示的な番号/名前フィルター、またはallを指定します。名前付きのシートセットを指定する場合は、その構成シートも必要です。サンプリングされたモデル警告と不完全なチェックは、シート単位の合格ではなく 未検証(NOT VERIFIED) として報告されます。revit_stairs—send_codeを使って、ガイドに沿って階段を作成します(あなたの確認後にのみ書き込みます)。トランザクション/失敗処理/クリーンアップのテンプレートが含まれます。ソースコードのチェックアウトは不要です。
プロンプトに必要なツールセットが有効になっていない場合は、追加すべき正確な --toolsets の行を提示し、中途半端な設定で実行することはありません。不足しているツールによって読み取り専用保護が可能な場合は、その保護を維持します。書き込み可能なツールセットを必要とするプロンプトは、設定を黙って変更せず、競合について説明します。プロンプトはエージェントへの指示であり、サーバーが強制するワークフローのロックではありません。
設定
v1.2.0: MCP の警告はデフォルトでロールバックされるようになりました。そのモデルで未解決の問題がある場合、書き込みはブロックされます。判断は 履歴 → 問題 で確認してください。新しい revit_get_failure_records ツールと revit_get_operation_status ツールは、Revit がモーダル状態の間もローカル状態を読み取ります。保留中または不明な操作を再試行しないでください。制御された失敗と受け入れ限界を参照してください。
v1.0.0 以降、サーバーは _changes とモデルごとのローカルな _history を報告します。履歴は呼び出しログとは独立してデフォルトで有効です。記録を無効にするには --disable-change-history を使用してください。meta ツールの revit_record_change、revit_get_change_records、revit_resolve_history_identity は、理由を明示的な呼び出し ID に関連付け、保存済みの変更を照会し、コピーまたは Save As の後に所有者の履歴に関する選択を記録します。プライバシー、制限、復旧については変更追跡を参照してください。
revit_survey_change_impact は query のツールです。send-code が無効な場合も含め、10 種類の関連グループを対象に、範囲を限定した読み取り専用の調査を行います。各リクエストで scopeThreshold が必要です。ビュー/集計表の反復処理は maxViews > 0 の場合にのみ有効になります。部分的な結果は部分的であることが明示され、パラメーターの観測結果は信頼できる履歴スナップショットではありません。変更影響の調査を参照してください。
優先順位は高い順に次のとおりです。CLI → 環境変数(BIMWRIGHT_*)→ %LOCALAPPDATA%\Bimwright\rvt-mcp\rvtmcp.config.json。
| 設定 | CLI | 環境変数 | JSON |
|---|---|---|---|
| ターゲットセレクター | --target 2024 / --target pid:12345 | BIMWRIGHT_TARGET | target |
| ツールセット | --toolsets query,create | BIMWRIGHT_TOOLSETS | toolsets |
| 読み取り専用 | --read-only | BIMWRIGHT_READ_ONLY=1 | readOnly |
| send_code | --enable-send-code / --disable-send-code | BIMWRIGHT_ENABLE_SEND_CODE | enableSendCode |
| 呼び出しログ | --enable-call-log / --disable-call-log | BIMWRIGHT_ENABLE_CALL_LOG | enableCallLog |
| 変更履歴(デフォルトでオン) | --enable-change-history / --disable-change-history | BIMWRIGHT_ENABLE_CHANGE_HISTORY | enableChangeHistory |
| 応答ガード | --enable-response-guard / --disable-response-guard | BIMWRIGHT_ENABLE_RESPONSE_GUARD | enableResponseGuard |
| 警告バイト数 | --response-warn-bytes | BIMWRIGHT_RESPONSE_WARN_BYTES | responseWarnBytes |
| 強い警告のバイト数 | --response-strong-warn-bytes | BIMWRIGHT_RESPONSE_STRONG_WARN_BYTES | responseStrongWarnBytes |
| 予算バイト数 | --response-budget-bytes | BIMWRIGHT_RESPONSE_BUDGET_BYTES | responseBudgetBytes |
| トランスポート上限 | --max-response-bytes | BIMWRIGHT_MAX_RESPONSE_BYTES | maxResponseBytes |
| スピル保持期間(デフォルト36時間) | --spill-retention-hours <n> | BIMWRIGHT_SPILL_RETENTION_HOURS | spillRetentionHours |
| LAN バインド(プラグイン) | — | BIMWRIGHT_ALLOW_LAN_BIND=1 | allowLanBind |
| 起動時の MCP オン/オフを記憶(プラグイン、デフォルトでオン) | リボン MCP: ON / OFF | BIMWRIGHT_AUTO_START_TRANSPORT=0/1 | autoStartTransport |
| ToolBaker の機能 | --enable-toolbaker / --disable-toolbaker | BIMWRIGHT_ENABLE_TOOLBAKER | enableToolbaker |
| アダプティブベイク | --enable-adaptive-bake / --disable-adaptive-bake | BIMWRIGHT_ENABLE_ADAPTIVE_BAKE=1 | enableAdaptiveBake |
| send_code の本文をキャッシュ(クラスターをベイク) | --cache-send-code-bodies / --no-… | BIMWRIGHT_CACHE_SEND_CODE_BODIES=1 | cacheSendCodeBodies |
| send_code ジャーナルを永続化 | --persist-send-code-bodies / --no-… | BIMWRIGHT_PERSIST_SEND_CODE_BODIES=1 | persistSendCodeBodies |
| ジャーナルの TTL | --persist-send-code-bodies-for 4h | BIMWRIGHT_PERSIST_SEND_CODE_BODIES_TTL | persistSendCodeBodiesUntil |
| 完了トースト(デフォルトでオン) | リボン Toast | BIMWRIGHT_ENABLE_TOAST=0 | enableToast |
| トーストのブランディング(デフォルトでオフ、保存されます) | Settings → Toast → Show branding | — | showBranding |
| トーストのアイドル時間(デフォルト20秒) | Settings → Toast → Idle duration | — | toastIdleSeconds |
| トーストの位置(デフォルトは左上、ドラッグ不可、保存されます) | Settings → Toast → Horizontal / Vertical alignment, Allow dragging the card, Reset position | — | toastHorizontalAlign, toastVerticalAlign, toastDragEnabled, toastDragOffset |
| UI 言語(アドイン) | リボン Language | BIMWRIGHT_UI_LANGUAGE | uiLanguage |
サーバーフラグを変更した後は、クライアントが新しいツールリストを取得できるように、MCP 接続を再起動してください。
MCP リボンの切り替えボタンは、最後に正常に設定されたオン/オフ状態を、同じ設定ファイル内の autoStartTransport として保存します。Revit は次回起動時にこの値を使用します。Revit を終了したり、プログラムからトランスポートを停止したりしても、この値は上書きされません。このファイルは同じ Windows ユーザーの Revit のバージョン間およびインスタンス間で共有されるため、最後に保存された切り替え状態が、すでに実行中のインスタンスを変更することなく、今後のインスタンスの起動時に適用されます。値が設定されていない場合、デフォルトはオンです。Revit プロセスの環境変数に BIMWRIGHT_AUTO_START_TRANSPORT が設定されている場合、起動時には保存済みの値よりも優先されます。リボンではユーザーの選択が引き続き保存されますが、後続の起動でも環境変数による上書きが優先されます。保存に失敗した場合は通知され、切り替えは現在のセッションにのみ適用されます。
その Revit バージョンで別のサードパーティ製 MCP アドインが検出された場合、保存された状態や環境変数で On が要求されていても、rvt-mcp は Off で起動します。Autodesk 公式の Revit MCP は対象外です。この起動時の上書きによって、保存された設定は維持されます。リボンのトグルをクリックして手動で起動すると、サードパーティ製 MCP アドインの数(rvt-mcp を含む)を示す、ローカライズされたモーダル通知が表示されます。確認すると起動できます。検出では .addin マニフェストと互換性のあるバンドル登録を読み取り、MCP の名前、クラス、アセンブリ名を認識し、重複する登録を除外します。汎用ローダーのメタデータの背後に隠れている MCP 実装は、認識されない場合があります。
権限と自動モード
これらのコントロールは v1.0.0 で追加されます。v0.8.1 パッケージには、新しいスイッチやツールごとの読み取り専用フィルタリングは含まれません。send_code と run_baked_tool は直接呼び出す必要があり、batch_execute はこれらを拒否します。
MCP のアノテーションには、各ツールがドキュメント/ファイルに及ぼす影響が記述されています。一時的な選択、アクティブビュー、ズームの変更は読み取り専用として扱われます。send_code にはアノテーションがないため、自動権限から除外し、任意のコードを呼び出すたびに確認してください。Claude Code では、以下の読み取り専用許可リストのみをコピーし、広範な mcp__rvt-mcp__* ワイルドカードは許可しないでください。このリストは --toolsets all を対象としており、選択したツールセットによっては、利用できるツールがこれより少ない場合があります。
読み取り専用許可リスト(アノテーションから生成)
{
"permissions": {
"allow": [
"mcp__rvt-mcp__revit_activate_view",
"mcp__rvt-mcp__revit_ai_element_filter",
"mcp__rvt-mcp__revit_analyze_geometry_complexity",
"mcp__rvt-mcp__revit_analyze_mep_network",
"mcp__rvt-mcp__revit_analyze_model_statistics",
"mcp__rvt-mcp__revit_analyze_sheet_layout",
"mcp__rvt-mcp__revit_analyze_structural_connections",
"mcp__rvt-mcp__revit_analyze_usage_patterns",
"mcp__rvt-mcp__revit_analyze_view_naming_patterns",
"mcp__rvt-mcp__revit_audit_families",
"mcp__rvt-mcp__revit_clash_detection",
"mcp__rvt-mcp__revit_compute_element_area",
"mcp__rvt-mcp__revit_compute_element_volume",
"mcp__rvt-mcp__revit_detect_firm_profile",
"mcp__rvt-mcp__revit_detect_system_elements",
"mcp__rvt-mcp__revit_find_elements_in_volume",
"mcp__rvt-mcp__revit_find_mep_disconnects",
"mcp__rvt-mcp__revit_find_overlapping_elements",
"mcp__rvt-mcp__revit_find_schedule_elements",
"mcp__rvt-mcp__revit_find_undimensioned_elements",
"mcp__rvt-mcp__revit_find_untagged_elements",
"mcp__rvt-mcp__revit_get_assembly_members",
"mcp__rvt-mcp__revit_get_available_family_types",
"mcp__rvt-mcp__revit_get_change_records",
"mcp__rvt-mcp__revit_get_current_target",
"mcp__rvt-mcp__revit_get_current_view_info",
"mcp__rvt-mcp__revit_get_element_bounding_box",
"mcp__rvt-mcp__revit_get_element_centroid",
"mcp__rvt-mcp__revit_get_element_details",
"mcp__rvt-mcp__revit_get_element_geometry",
"mcp__rvt-mcp__revit_get_element_parameters",
"mcp__rvt-mcp__revit_get_element_relationships",
"mcp__rvt-mcp__revit_get_failure_records",
"mcp__rvt-mcp__revit_get_family_instances",
"mcp__rvt-mcp__revit_get_group_members",
"mcp__rvt-mcp__revit_get_link_coordinate_system",
"mcp__rvt-mcp__revit_get_link_elements",
"mcp__rvt-mcp__revit_get_material_properties",
"mcp__rvt-mcp__revit_get_material_quantities",
"mcp__rvt-mcp__revit_get_mep_element_connectors",
"mcp__rvt-mcp__revit_get_model_warnings_summary",
"mcp__rvt-mcp__revit_get_operation_status",
"mcp__rvt-mcp__revit_get_panel_schedule",
"mcp__rvt-mcp__revit_get_print_settings",
"mcp__rvt-mcp__revit_get_project_coordinate_system",
"mcp__rvt-mcp__revit_get_room_boundaries",
"mcp__rvt-mcp__revit_get_room_openings",
"mcp__rvt-mcp__revit_get_schedulable_fields",
"mcp__rvt-mcp__revit_get_schedule_data",
"mcp__rvt-mcp__revit_get_schedule_definition",
"mcp__rvt-mcp__revit_get_schedule_formulas",
"mcp__rvt-mcp__revit_get_selected_elements",
"mcp__rvt-mcp__revit_get_structural_loads",
"mcp__rvt-mcp__revit_get_system_inventory",
"mcp__rvt-mcp__revit_get_titleblock_parameters",
"mcp__rvt-mcp__revit_get_type_parameters",
"mcp__rvt-mcp__revit_get_view_visibility",
"mcp__rvt-mcp__revit_get_viewport_geometry",
"mcp__rvt-mcp__revit_health",
"mcp__rvt-mcp__revit_list_areas",
"mcp__rvt-mcp__revit_list_assemblies",
"mcp__rvt-mcp__revit_list_available_targets",
"mcp__rvt-mcp__revit_list_baked_tools",
"mcp__rvt-mcp__revit_list_export_settings",
"mcp__rvt-mcp__revit_list_family_types_in_family",
"mcp__rvt-mcp__revit_list_groups",
"mcp__rvt-mcp__revit_list_keynotes",
"mcp__rvt-mcp__revit_list_linked_cad",
"mcp__rvt-mcp__revit_list_linked_models",
"mcp__rvt-mcp__revit_list_loaded_families",
"mcp__rvt-mcp__revit_list_materials",
"mcp__rvt-mcp__revit_list_mep_systems",
"mcp__rvt-mcp__revit_list_phases",
"mcp__rvt-mcp__revit_list_project_parameter_bindings",
"mcp__rvt-mcp__revit_list_project_parameters",
"mcp__rvt-mcp__revit_list_rebar",
"mcp__rvt-mcp__revit_list_recent_models",
"mcp__rvt-mcp__revit_list_revisions",
"mcp__rvt-mcp__revit_list_rooms",
"mcp__rvt-mcp__revit_list_saved_selections",
"mcp__rvt-mcp__revit_list_schedules",
"mcp__rvt-mcp__revit_list_shared_parameters",
"mcp__rvt-mcp__revit_list_sheets",
"mcp__rvt-mcp__revit_list_titleblocks",
"mcp__rvt-mcp__revit_list_view_filters",
"mcp__rvt-mcp__revit_list_view_templates",
"mcp__rvt-mcp__revit_list_worksets",
"mcp__rvt-mcp__revit_load_selection",
"mcp__rvt-mcp__revit_lookup_message",
"mcp__rvt-mcp__revit_measure_distance_between_elements",
"mcp__rvt-mcp__revit_project_point_onto_face",
"mcp__rvt-mcp__revit_raycast_from_point",
"mcp__rvt-mcp__revit_select_elements",
"mcp__rvt-mcp__revit_show_element_in_view",
"mcp__rvt-mcp__revit_show_message",
"mcp__rvt-mcp__revit_suggest_view_name_corrections",
"mcp__rvt-mcp__revit_survey_change_impact",
"mcp__rvt-mcp__revit_workflow_model_audit"
]
}
}
send_code はデフォルトで on で、ToolBaker とは独立しています。call-log はデフォルトで off です。CLI の設定は環境変数より優先され、環境変数は JSON より優先されます。認証済みサーバーの設定は、そのリクエストに限りプラグインの設定より優先されます。call-log をオフにすると、サーバージャーナル、プラグインの mcp-calls.jsonl、および send-code の本文ジャーナルは記録されません。ただし、メモリ内の History は引き続き利用できます。本文のジャーナル記録には、call-log をオンにしたうえで、個別の TTL オプトインも必要です。ToolBaker の usage.jsonl は別のもので、適応型ベイク設定に従います。
ゲートウェイと Revit アドインの診断ログは、%LOCALAPPDATA%\Bimwright\rvt-mcp\rvt-mcp.log を共有します。容量は 10 MiB で、10 MiB のバックアップを 1 つ保持します。ログエントリには UTC の日付、プロセス ID、Revit の年が含まれ、繰り返されるメッセージは要約されます。ロギングには上限付きのバックグラウンドキューを使用するため、ファイルがロックされていたりディスクが遅かったりすると、Revit をブロックせずに診断ログが失われることがあります。既知の従来形式の revit-mcp.log、debug.log、baked/compile-refs.log は末尾 64 KiB のみ保持されます。これらは、実行時のデータ移行ではコピーされなくなりました。
call log、日次ジャーナル、send-code ジャーナル、usage、ベイク監査記録は、それぞれ 30 日間/グループあたり 100 MiB まで保持されます。新しいファイルは、追記によって 5 MiB を超える前と UTC 日付が切り替わる際にローテーションされます。起動時のメンテナンスとその後の書き込みでは、必要に応じて生成されたアーカイブのうち古いものが削除されます。使用状況の分析では、引き続き最大 21 日間、直近 5,000 件のレコードを対象とします。send-code 本文の TTL は、これに加えて適用される、より短い保持期間です。メンテナンスは生成されたログ名のみを対象とし、リンクされたファイルやフォルダーをたどりません。モデル、設定、データベースは対象外です。
応答ガードはデフォルトで on です。UTF-8 警告は 65536 バイト、強い警告は 262144 バイト超、予算は 716800 バイト、転送上限は 1048576 バイトです。JSON のエスケープ処理と MCP のコンテンツ/メタデータは、サーバー側で測定されます。サイズ超過の読み取りでは、範囲を絞る方法を案内する RESPONSE_TOO_LARGE が返されます。完了した書き込みでは、簡潔な要約が返されます。任意コードの出力があふれた場合、mutation_applied: null を含むローカルファイルに保存されます。コマンドを再実行せず、ファイルを確認してください。スピルファイルはデフォルトで 36 時間保持されます(--spill-retention-hours、1-8760。無効な値の場合は 36 が使用されます)。ファイル数の上限によって、保持期間が経過していないファイルが削除されることはありません。ガードをオフにしても、転送上限は引き続き有効です。バイト数の上限は 1024 以上の整数で、warn <= strong <= budget <= max の順序にする必要があります。予算を下げる場合は、より低いしきい値も調整してください。
サポート対象の Revit バージョン
| Revit | プラグイン TFM | トランスポート |
|---|---|---|
| 2022–2024 | .NET Framework 4.8 | TCP |
| 2025–2026 | .NET 8 (net8.0-windows7.0) | Named Pipe |
| 2027 | .NET 10 (net10.0-windows7.0) | Named Pipe |
Revit デスクトップのフルバージョンのみが対象です。Revit Viewer はサポート対象ではありません。CI では 6 つすべてのアドインをビルドしますが、実行時の対応状況は年によって異なります。使用する年の組み込みツールとカスタム C# を再確認してください。
複数の Revit インスタンス
サーバーは、同じ年の複数のインスタンスが同時に実行されている場合も含め、正確に 1 つの Revit インスタンスにバインドされます。一致するインスタンスが 1 つだけの場合に限り、クエリは自動でバインドできます。複数のインスタンスが一致すると AMBIGUOUS_TARGET が返されます。モデルやファイルへの書き込みにはターゲットの選択が必要で、モデルへの書き込みには検証済みのドキュメントも必要です。セレクター:auto、4 桁の年(2024)、pid:<n>、id:revit-<year>-<pid>。R24 などの従来の R コードは拒否されます。
複数のインスタンスが実行されている場合、特に同じ年のインスタンスが複数ある場合は、ターゲットを推測しないでください。書き込み可能なセッションでは、次の手順を実行します。
revit_list_available_targetsを呼び出します。稼働中の各インスタンスがtarget_id、pid、host_year、window_title、sourceとともに一覧表示されます。pidおよび/またはwindow_titleでインスタンスを選択します。revit_switch_target(version="pid:<n>", verify=false)でプロセスを選択し、そのアクティブなビュー/ドキュメントをクエリしてから、revit_switch_target(version="pid:<n>", verify=true, expectedDocumentId="<document_id>")で確認します。ID はクエリの_targetスタンプからコピーしてください。expectedDocumentIdを省略すると、検証プローブが報告したドキュメントを確認します。一致するインスタンスが 1 つだけの場合に限り、auto/年のセレクターを使用できます。revit_get_current_targetには、バインド、世代、selection_confirmed、confirmed_document_id、confirmation_requiredが表示されます。正常なホスト応答には、応答の圧縮後も、実際の PID、年、ドキュメント ID を含む_targetが付与されます。
稼働中の選択済みインスタンスから切り替えるには rebind=true が必要です。切り替えが受理されるたびに世代が進むため、それ以前の呼び出しが後からの確認を採用することはありません。検証に失敗した場合、その間に新たな切り替えがなければ、以前の稼働中のバインドに戻ります。ドキュメントを閉じて再度開いた場合、別のプロジェクト、または Edit Family は、それぞれ異なるドキュメント ID になります。アドインは各書き込みを実行する前に、Revit UI スレッド上で期待される ID を確認します。別のドキュメントを読み取っても、書き込み対象の固定は変わりません。書き込みの前に、そのドキュメントを確認して承認してください。open_model はドキュメントを確立します。verify=false でプロセスを選択し、モデルを開いてから検証してください。batch_execute 内では実行できません。
書き込み可能なセッションでのターゲットエラーコードと復旧方法です。読み取り専用セッションでは、以下の起動/再起動手順を使用してください。TARGET_INTERRUPTED 以外のすべてのコードでは、コマンドは送信されていません。
| コード | 意味 | エージェントの対応 |
|---|---|---|
NO_TARGET | セレクターに一致する稼働中のインスタンスがありません(暗黙のバインドが失われ、候補がゼロになった場合も含みます) | revit_list_available_targets を呼び出し、Revit/アドインを起動するか、セレクターを修正します |
TARGET_UNAVAILABLE | バインドされたインスタンスは稼働中ですが、到達できません。リスナーが停止中または再起動中、記述子が存在しない、トークンが拒否された、などが原因です。バインドは維持されます | 少し待ってから再試行します。ユーザーに、その Revit で MCP を(再)起動するよう依頼します。ユーザーが希望しない限り、別のインスタンスに切り替えてはいけません |
TARGET_BUSY | エンドポイントは存在しますが、5 秒以内にハンドシェイクが完了しませんでした。通常、別のエージェントまたはゲートウェイが単一の接続を使用しているか、Revit がブロックされています | 後で再試行します。1 つのインスタンスで 2 つのゲートウェイを実行してはいけません |
TARGET_LOST | 明示的に指定した(pid:/id:)インスタンスが終了しました | candidates を確認し、ユーザーに確認してから revit_switch_target を実行します |
TARGET_CHANGED | 暗黙的にバインドされたインスタンスが終了し、代わりのインスタンスがちょうど 1 つ存在する場合(または、呼び出しの到着から送信までの間にバインドが変更された場合)です。コマンドは送信されていません。確認されるまで、すべての呼び出しでこの結果が返されます | 提案されたインスタンス(window_title)を確認し、revit_switch_target で確定してから、呼び出しを再実行します |
AMBIGUOUS_TARGET | 最初の選択時、または切り替え時に、複数のインスタンスが一致しました | 一覧を表示し、pid/window_title で選択してから、pid:/id: を使用します |
TARGET_UNCONFIRMED | 選択したターゲット/ドキュメントが、書き込み操作用に確認されていません | revit_switch_target で、対象の PID とドキュメントを確認します |
TARGET_REBIND_REQUIRED | 選択した稼働中のターゲットが別のターゲットに置き換えられようとしています | バインドを確認し、意図した変更であれば rebind=true を指定して切り替えます |
TARGET_INTERRUPTED | コマンドは送信されましたが、応答前に接続が切れました(sent:true、outcome:unknown) | 書き込み操作を再実行する前に、モデルの状態を確認します |
INVALID_TARGET_SELECTOR | セレクターまたは R コードの形式が無効です | auto、年、pid:<n>、または id:<target_id> を使用します |
Revit の再起動後は、Revit が 1 つだけ開いている場合でも、書き込み可能なセッションは TARGET_CHANGED を返し、何も送信せずに revit_switch_target の呼び出しを 1 回待機します。再起動後の Revit では、別のモデルが開いている可能性があります。提案されたインスタンスを確認して確定し、呼び出しを再実行してください。
読み取り専用セッション: revit_list_available_targets を呼び出し、ゲートウェイの起動時に --target pid:<n> を選択します。ターゲットが変わるたびにゲートウェイを再起動してください。revit_switch_target は使用できません。上記のターゲットエラーでは、このツールを推奨する代わりに、起動/再起動の方法が案内されます。
revit_switch_target はセッションのルーティングを変更するため、読み取り専用ではないことを示すアノテーションに従い、--read-only の対象から除外されています。読み取り専用モードでは、すべてのツールセットを含む 98 個のツールが公開されます。ゲートウェイの起動時に --read-only --target pid:<n> を指定して対象のプロセスを選択してください。変更するには、新しいセレクターを指定してゲートウェイを再起動します。revit_list_available_targets と revit_get_current_target は、引き続き状態確認に使用できます。
DOCUMENT_UNCONFIRMED と DOCUMENT_CHANGED はアドインによる拒否を示します。リクエストは Revit に到達しましたが、モデル操作は開始されていません。報告された _target を確認してから、対象のドキュメントを確定してください。ゲートウェイとアドインの両方で document_target_v1 がサポートされている必要があります。両方をまとめて更新してください。古いゲートウェイに接続されたアドインは、代わりに PAIRING_REQUIRED を返します。このゲートウェイではドキュメントを確認できないため、サーバーを更新してください。
セキュリティとプライバシー
- デフォルトではローカルで動作します。ループバック TCP またはローカルの名前付きパイプを使用し、セッションごとの認証トークンは
%LOCALAPPDATA%\Bimwright\rvt-mcp\にある検出ファイルに保存されます。 - ツールの引数はハンドラーの実行前にスキーマチェックされ、モデルに返されるエラーはサニタイズされます。
send_codeは Revit プロセス内で任意の C# を実行します。強力な機能ですが、リスクも伴います。許容できない場合は、--read-onlyまたは--disable-send-codeを使用してください。- アダプティブベイク、ボディキャッシュ、send_code ジャーナルはオプトイン方式で、ユーザープロファイル内に保存されます。デフォルトでは、send_code の本文を長期間保存するログに書き込みません。
詳細はこちら:SECURITY.md、docs/bake.md。
ドキュメント
| ドキュメント | トピック |
|---|---|
| AGENTS.md | エージェントのインストールプロトコル |
| docs/install.md | インストーラーの詳細、アップグレード、アンインストール、開発者向けおよび NuGet によるインストール |
| docs/mcp-client-wiring.md | クライアントごとの MCP 接続設定 |
| ARCHITECTURE.md | プロセス、トランスポート、DTO のルール |
| docs/controlled-failures.md | 警告時のロールバック、モデルゲート、Issues の判断、保留中操作の復旧 |
| docs/send-code.md | send_code のソース形式とエラー処理 |
| docs/bake.md | アダプティブベイクとボディのプライバシー |
| docs/localization.md | UI 言語、オーバーライド、ホットリロード |
| CONTRIBUTING.md | ビルド、テスト、ツールの追加 |
| CHANGELOG.md | リリースノート |
コミュニティからの貢献
コード、バグ報告、再現可能な例、提案は rvt-mcp の改善に役立ちます。以下の皆さんに感謝します。
| 貢献者 | 貢献内容 |
|---|---|
| @thiagobarretosn-hue | MEP ネットワークのメンバーシップと配管システムの処理に関する再現可能な報告(#11、#12)。 |
| @razmikb | ホストされたファミリの配置、および階段/send-code のエラー報告。これらを受けて、配置チェック、ヘルパークラスのサポート、より広範なエラー処理テストが実現しました(#13、#14)。 |
| @Thestreetarckitect | ファミリ作成ツールスイートの提案。ロードマップと対象範囲の明確化に役立ちました(#7)。 |
| @PhanCongVuDuc | プルリクエスト #15:モデルを開いていない状態でも send_code を実行できるようにする修正、revit_switch_target のヒント修正、および revit_open_model の提案。再構成した形で v0.8.1 に含まれました。 |
bimwright ファミリー
AI アシスタントを BIM および CAD アプリケーションに接続するオープンソースツールです。
bimwright という名前は、BIM と、作り手や建築者を意味する古い言葉 wright(shipwright など)を組み合わせたものです。
ゲートウェイの名前の選び方をご覧ください。
- rvt-mcp — Autodesk® Revit®
- dwg-mcp — Autodesk® AutoCAD®
- nwd-mcp — Autodesk® Navisworks®
- ipt-mcp — Autodesk® Inventor®
- bim-wiki — ベトナム語を中心とした BIM ナレッジベース
検証
ツール記述子のベンチマークと v1.2.0 の検証記録をご覧ください。これらでは、影響を受けたリグレッション結果、以前のネイティブ環境での証拠、保留中のリリース検証範囲を区別しています。記述子のバイト数は、モデルのトークン数やネイティブ性能を測るものではありません。
ライセンス
Apache-2.0 — LICENSE。
フォークやリブランドは歓迎します。必要なのはライセンス条項を守ることだけです(LICENSEと著作権表示を残し、変更したファイルに印を付けてください)。rvt-mcpがお役に立った場合、スターを付けたり、製品内でBIMwrightに言及したりしていただけるとありがたいですが、完全に任意です。IssueやPRもいつでも歓迎します。
RevitとAutodeskは、Autodesk, Inc.の商標です。bimwrightは独立したオープンソースプロジェクトであり、Autodesk, Inc.とは提携しておらず、同社の後援や承認も受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。