CLI_Revit
About
Token-efficient MCP harness for Revit/BIM automation — search+run over 160+ scripts instead of exposing tools individually.
Details
- Author
- fmg75
- Categories
- Design, Other, File Management
Jump to
Setup
Install CLI_Revit in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/fmg75/CLI_Revit
Follow the installation instructions in the repository README, then restart your MCP client.
Repo minimo para operar Revit con la menor intermediacion posible entre el LLM y la API.
CLI_Revites un harness local de automatizacion para Revit.
- conecta un agente o LLM con un modelo abierto en Revit
- permite descubrir, parametrizar y ejecutar scripts BIM reutilizables
- expone una superficie shell-first porrevit_cli.pyy una superficie MCP pormcp_server.py
- mantiene una capa minima de intermediacion entre el agente y la API de Revit
No es solo un plugin, ni solo una libreria, ni solo un servidor MCP. El MCP es una interfaz de acceso mas; el nucleo del repo es el harness de ejecucion y automatizacion sobre Revit.
- Revit 2023/2024/2025 instalado (paraRevitAPI.dll/RevitAPIUI.dll)
- .NET SDK o Visual Studio 2022/Build Tools + .NET Framework 4.8 targeting pack
- Python 3.8+ x64
- pip install websocket-client mcp
# 1. compilar e instalar el plugin de Revit (detecta version instalada) cd plugin build_all_versions.bat cd .. # 2. abrir Revit con un documento activo # el plugin RevitAgent levanta el servidor WebSocket solo, en ws://localhost:18789 # 3. verificar conexion python revit_cli.py doctor python revit_cli.py ping # 4. primer comando real python revit_cli.py search "muros" python revit_cli.py show get_elementos python revit_cli.py run get_resumen_modelo --params-json "{\"detalle\":\"minimo\"}"
SipingrespondeDOWN: Revit no esta abierto, el.addinno quedo instalado, o falta configurarPYTHONNET_PYDLL— detalle completo enplugin/README.md.
Para usarlo desde un agente en vez de la shell (Claude Code, OpenCode, o cualquier cliente MCP): el repo ya trae.mcp.jsonymcp_server.pylistos, ver seccion "Uso desde Claude Code" mas abajo.
Mismo patron que un harness generico (Claude Code, OpenCode, dsh): loop de agente + intermediacion minima entre decision y ejecucion + feedback estructurado para verificar. La diferencia es el alcance:
- un harness generico decide su dominio por prompt/contexto
- este harness tiene el dominio hardcodeado en el protocolo: catalogo de scripts, convencionget_/crear_/modificar_, contratoRESULTADO: OK|WARN|ERROR
Por eso se expone via MCP y no como plugin nativo de cada harness general: el harness vertical se mantiene una sola vez en este repo, y cualquier harness general lo consume como cliente MCP sin reescritura.
- docs/INICIO_BIM.md: puerta de entrada para una sesion de modelado BIM del agente
- README.md: guia del repo y estado actual de desarrollo
- docs/DESARROLLO_REPO.md: guia para continuar el repo por capacidades BIM, no por acumulacion de scripts
- docs/CAPACIDADES_BIM.md: matriz corta de capacidades cubiertas, parciales, ausentes y prioridades activas
- docs/SCRIPTS_BASE.md: nucleo operativo del repo y reglas para tocar scripts base
- hints.md: libreta operativa corta y corregible
- CONTRIBUTING.md: criterio de aceptacion de PRs y convenciones de scripts
- LICENSE/NOTICE/AUTHORS: licencia Apache-2.0 y creditos
- revit_cli.py: entrypoint shell-first para buscar y correr scripts
- revit_client.py: cliente WebSocket minimo para ejecutar Python raw
- plugin/: add-in C# local de Revit (RevitAgentPlugin) para compilar e instalar el servidor WebSocket
La regla central de este repo es simple:
- cada tarea BIM debe consumir la menor cantidad de tokens posible para llegar a una respuesta buena
- los tokens deben ir a leer estado real del modelo, decidir y verificar
- no deben ir a contexto inflado, routing local, wrappers redundantes o documentacion larga
- cliente a Revit chico y obvio
- scripts explicitos y reutilizables
- hints cortos en vez de una capa de tools
- pocas piezas base, no catalogos grandes de variantes
leer poco -> decidir bien -> mutar chico -> verificar -> guardar solo la regla util
- leerdocs/INICIO_BIM.md
- leerhints.md
- correrpython revit_cli.py doctor
- ir aREADME.mdsolo si hace falta contexto del repo o decisiones de arquitectura
- hacer una lectura minima real del modelo antes de mutar
- si ya existe un script util, buscarlo y correrlo conPARAMS
- si el pedido es una variante chica, ajustar el script existente antes de crear otro
- crear un script nuevo solo cuando abre una capacidad reutilizable de verdad
- no guardar un script nuevo para una decision puntual de modelado
- si el pedido admite varias soluciones BIM razonables y el criterio no esta dicho, consultar antes de fijar una variante permanente
La idea derevit_cli.pyno es reemplazar al LLM sino evitar que tenga que reescribir Python completo para cada consulta.
python revit_cli.py doctor python revit_cli.py ping python revit_cli.py search "resumen del modelo" python revit_cli.py show get_elementos python revit_cli.py run get_resumen_modelo --params-json "{\"detalle\":\"minimo\"}" python revit_cli.py run crear_muros --params-json "{\"segmentos_m\":[[[0,0],[5,0]]],\"nivel_inicial\":\"Nivel 1\",\"altura_default_m\":3.0}"
Si vas a usar Codex con modelo local desde este repo, el entrypoint pasa a ser:
.\codex-local.ps1 -Model qwen .\codex-local.ps1 -Model gemma
Launchers equivalentes para otros CLIs locales:
.\hermes-local.ps1 -Model qwen .\opencode-local.ps1 -Model qwen
- hermes-local.ps1exige contexto minimo de65536;qwen3-coder-30b-q4ygemma4-26b-a4b-q4kmquedan configurados para ese objetivo en los launchers locales.
- vive enCLI_Revit, no depende deproj-agent-local
- resuelve los GGUF enC:\Users\fmg\local_models
- resuelvellama-server.exeenC:\Users\fmg\local_models\llama.cpp\llama-server.exe
- si hace falta, permite override porPROJ_AGENT_MODEL_PATH,PROJ_AGENT_LLAMA_SERVER_EXEo.codex/local-model-paths.json
Para elegir un perfil exacto sin usar alias:
.\codex-local.ps1 -Profile qwen3-coder-30b-q4 .\codex-local.ps1 -Profile gemma4-26b-a4b-q4km
Ahora el repo tambien incluye un servidor MCP local para que Claude pueda usar los scripts existentes sin salir del flujo normal del proyecto.
- mcp_server.py: servidor MCP sobre stdio que reutilizarevit_cli.pyyrevit_client.py
- .mcp.json: configuracion de proyecto para Claude Code
- .claude/settings.json: permisos preaprobados solo para herramientas seguras de descubrimiento y consulta
- tener Revit abierto con el pluginRevitAgentlevantado
- abrir este repo desde Claude Code
- aprobar el servidorrevit-agentcuando Claude detecte.mcp.json
- usar herramientas MCP comosearch_scripts,show_scriptyrun_script
- el catalogo completo descripts/queda oculto detras desearch_scripts,show_scriptyrun_script
- las tools MCP aceptantimeoutymax_output_bytes; si una salida supera el limite, el plugin devuelve preview y guarda la salida completa en.revit_cli/artifacts
- el plugin acepta requests paralelas desde CLI/MCP/WebSocket, pero las ejecuta en cola FIFO dentro del hilo principal de Revit
- el server carga el catalogo al iniciar; si agregas scripts nuevos, reinicia Claude o vuelve a cargar el servidor
- los tools de mutacion no quedaron preautorizados en.claude/settings.json; la idea es mantener permisos conservadores sobre el modelo
- run_scriptejecuta cualquier script por nombre o ruta relativa sin inflar el catalogo visible de tools
LLM / cliente -> revit_cli.py o revit_client.py -> ws://localhost:18789 -> plugin RevitAgent (C# + Python.NET) -> Autodesk.Revit.DB
revit_cli.pyes la puerta de entrada normal.
revit_client.pysirve para ejecutar Python raw cuando hace falta control total o para prototipar una pieza nueva antes de volverla script reusable.
El transporte WebSocket es compatible con uso concurrente: varios clientes pueden enviar requests a la vez. Revit sigue siendo single-threaded, por lo que el plugin las encola en FIFO y las ejecuta secuencialmente enExternalEvent. Las respuestas incluyendiagnosticscon tiempos de cola/ejecucion y bytes de salida.
- revit_client.py: cliente WebSocket minimo hacia Revit
- revit_cli.py: buscador/runner minimo para reutilizar scripts existentes
- docs/DESARROLLO_REPO.md: criterio de roadmap y foco del repo
- docs/CAPACIDADES_BIM.md: matriz accionable de capacidades BIM y prioridades
- docs/SCRIPTS_BASE.md: lista de scripts base y criterio de cuidado del nucleo
- plugin/: codigo fuente, build e instalacion del plugin local de Revit
- hints.md: libreta operativa corta y corregible
- .revit_cli/: estado local minimo entre sesiones (last_run.json+history.jsonl)
- scripts/consulta: lecturas del modelo
- scripts/creacion: acciones de modelado
- scripts/modificacion: ajustes sobre elementos existentes, tags y cambios de documentacion en vistas
- scripts/reportes: salidas tecnicas persistentes y exportaciones
El nombre del script debe reflejar su contrato operativo real, no solo la intencion de negocio.
- get_: lectura del modelo, sin mutacion ni artefacto persistente
- crear_: crea elementos nuevos en el modelo
- modificar_o verbo de cambio (mover_,aplicar_,etiquetar_,reubicar_): muta elementos o vistas existentes
- exportar_: genera salida externa persistente (PDF, imagen, etc.)
- generar_reporte_/generar_memoria_: genera documento tecnico persistente
Si un script mezcla dos contratos, debe partirse o quedar claramente sesgado hacia uno y exponer alias de compatibilidad.
Este repo ya incluye el plugin necesario para que el runtime sea autosuficiente:
- codigo fuente enplugin/
- proyecto .NET enplugin/RevitAgentPlugin.csproj
- build local enplugin/build.bat
- build multi-version enplugin/build_all_versions.bat
- documentacion operativa enplugin/README.md
Si solo necesitas una instalacion puntual ybuild.batdetecta bien tu version de Revit:
- el plugin instala el servidor enws://localhost:18789
- editar_boceto_muro.pypuede aprovecharRevitEditScopeHelpersdel assembly del plugin
- el detalle de requisitos (dotnet,net48,PYTHONNET_PYDLL, Addins por version) vive enplugin/README.md
{ "action": "execute", "script": "codigo python aqui", "timeout_s": 60, "request_id": "opcional", "max_output_bytes": 262144, "artifact_dir": "C:\\Users\\fmg\\Desktop\\CLI_Revit\\.revit_cli\\artifacts" }
timeout_s,request_id,max_output_bytesyartifact_dirson opcionales.max_output_bytesusa 256 KB por defecto; si se supera,result/tracebackcontiene una preview y la salida completa queda como artefacto local.
{ "status": "ok", "request_id": "opcional", "result": "stdout capturado o OK", "artifacts": [], "diagnostics": { "elapsed_ms": 12, "queue_wait_ms": 2, "execution_ms": 5, "output_truncated": false } }
{ "status": "error", "error": "mensaje", "traceback": "stacktrace" }
- doc:Autodesk.Revit.DB.Document
- uidoc:Autodesk.Revit.UI.UIDocument
- app:Autodesk.Revit.ApplicationServices.Application
- devolver resultados conprint(), no por ultima expresion
- no usarwith Transaction(...); abrir y cerrar la transaccion manualmente
- Revit trabaja en pies decimales; convertir unidades de forma explicita
- si una API pideIList<T>, usarList[T]de .NET, nolistde Python
- FamilySymbol.Activate()debe ocurrir dentro de unaTransaction
- ToElements()conviene envolverlo conlist()antes de usar slicing
Para no inflar contexto, la salida de los scripts debe pensarse para decision operativa, no para narracion.
- python revit_cli.py run ...ahora usa--output-mode autopor default: si detecta_JSON=o stdout largo, compacta la respuesta.
- si necesitas ver todo el stdout, usarpython revit_cli.py run ... --output-mode raw
- emitir siempre una linea de estado corta:RESULTADO: OK|WARN|ERRORoRESULTADO=ok
- emitir metricas clave en mayusculas:TOTAL_VISTAS,COUNT_FILTRADAS,ELEMENT_IDS, etc.
- si hace falta detalle estructurado, emitirlo en una sola lineaNOMBRE_JSON=...
- limitar detalle humano conmax_detalle; el detalle completo debe quedar opt-in, no por defecto
1 linea de estado + 3 a 8 metricas utiles + 0 o mas payloads _JSON compactables + tablas o detalle solo si cambian una decision
from Autodesk.Revit.DB import Transaction txn = Transaction(doc, "Operacion") txn.Start() try: # cambios txn.Commit() except Exception: txn.RollBack() raise
- metros -> pies:valor_m 3.28084
- pies -> metros:valor_ft 0.3048
from revit_client import ping print("Conectado:", ping())
- tool_catalog.py
- prepare-request
- routing interno
- RAG o memoria automatica compleja
- un agente de preferencia
- documentacion grande dificil de corregir
- el flujo shell-first ya existe y funciona desderevit_cli.py
- doctorvalida conexion, metadata minima y smoke tests de busqueda
- rundeja un rastro local chico en.revit_cli/para retomar entre sesiones sin inflar el repo
- el plugin de Revit ya vive dentro de este repo y puede compilarse desdeplugin/
- hay una base amplia de scripts reutilizables enscripts/consulta,scripts/creacion,scripts/modificacionyscripts/reportes
- hints.mdya cumple el rol de memoria operativa corta
- la nueva separacion documental deja un punto de entrada BIM (docs/INICIO_BIM.md) y esteREADMEcomo guia viva del repo
- seguir consolidando scripts base en lugar de sumar variantes pequenas
- verificar en uso real que los scripts mas frecuentes sigan siendo confiables
- documentar solo lo que cambie decisiones operativas o de arquitectura
- mantener este repo chico, legible y facil de corregir
- .revit_cli/last_run.jsony.revit_cli/history.jsonlpara rastro local minimo de ejecuciones
- hints.mdpara reglas cortas de alto valor
- README.mdpara decisiones de arquitectura, guia y estado del repo
Si algo no entra en 1 o 2 bullets, probablemente no es un hint. Si un dato solo sirve para recuperar una corrida reciente, probablemente va a.revit_cli/, no ahints.md.
Este repo no busca que el LLM "sepa mucho" antes de actuar.
- leer solo lo necesario
- elegir una plantilla simple
- ejecutar contra el modelo real
- verificar
- y seguir con el menor costo de tokens por tarea
You're agent can Chain 60+ AI image and video models on one workflow canvas
Production-grade MCP server that lets AI assistants control AutoCAD on Windows via natural language — draw lines, circles, rectangles, manage layers, calculate areas, and export PDFs through the AutoCAD COM API.
Changeimageto - Free Image Editing tools
16 tools to remove backgrounds, blur or grayscale backgrounds, change colors, convert formats (PNG/JPEG/WebP/…), upscale, denoise/enhance, run OCR, export PDF, edit text in images (Gemini), clean watermarks, inpaint masked regions, and run bulk resize / convert / quality checks.
Looks for design.md file in refero styles to make your UI design better.
Build your custom templated images. One at a time or batches. Save them to presets to reuse later. Create templates or images via agent using MCP server.
Provides instant access to Apple's Human Interface Guidelines, with content auto-updated periodically.
Publish, update, and manage Markdown pages on a permanent shareable URL directly from your AI conversation.
Publish HTML, Markdown, KV, JSON, files to brewpage.app from AI assistants.
API-first platform for image optimization and document design. Generate optimized images, PDFs, and documents at scale with our visual editor and REST API.
Carryo is a remote MCP server for sharing Claude or ChatGPT-created HTML artifacts as live links.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



