Hi everyone,
I’ve been experimenting with the new Model Context Protocol (MCP) standard that allows LLMs (like Claude Desktop) to connect to local tools and data.
I have a specific workflow in mind and wanted to get the community’s thoughts on the best architecture to achieve it using Rhino.Inside.Revit.
The Concept: I want to run a local MCP server that acts as a bridge between an LLM and the active Revit/Rhino.Inside session.
The Workflow:
-
Prompt: I ask the AI (e.g., via Claude Desktop): “Select all Windows in the active Revit view and transfer their geometry to the Rhino file.”
-
MCP Action: The MCP server interprets this intent and triggers a function.
-
Execution: That function calls the Revit API (via Rhino.Inside) to select the elements, converts the geometry using RhinoCommon, and bakes it into the active Rhino doc.
The Technical Question: Since Revit and Rhino are desktop applications (not easy-to-query web APIs), what is the best way to “expose” the R.I.R instance to a local MCP server?
-
Option A: Should the MCP server run inside the Revit process (e.g., as a C# Add-in or Python script) listening for requests?
-
Option B: Should the MCP server be an external Python process that communicates with Revit via IPC or a local socket?
Has anyone here experimented with hooking an external AI agent or local server directly into the R.I.R context to trigger Grasshopper definitions or scripts?
Any pointers on where to start with the architecture would be appreciated!
Thanks.