presto-mcp-server
by NeoNexAI
README.md
# presto-mcp-server
[](https://github.com/NeoNexAI/presto-mcp-server/actions/workflows/ci.yml)
[](https://pypi.org/project/presto-mcp-server/)
[](https://pypi.org/project/presto-mcp-server/)
[](LICENSE)
MCP server que conecta **Claude** con **Presto** (software de presupuestos y
mediciones de **RIB Software**) — versión **2025**.
Por **NeoNexAI Agency**, para clientes de consultoría IA que usan Presto.
Dos vías complementarias:
- **COM en vivo (`Presto.App.25`)** — controla la obra **abierta** en Presto:
leer/escribir conceptos, precios y cualquier campo, e invocar opciones internas
del programa. Requiere **Presto instalado y ejecutándose** en el mismo equipo.
- **BC3 (FIEBDC-3)** — lee y analiza ficheros de presupuesto **sin abrir Presto**
(multiplataforma; ideal para auditoría rápida).
> Presto de escritorio **no tiene API REST** (eso es solo Presto *ServerCloud*).
> La integración local correcta es **COM**, que la documentación oficial de RIB
> soporta para VBScript, VB.NET y **Python (`win32com`)** — que es lo que usa este server.
---
## Requisitos en el PC
- **Windows** (la vía COM es Windows-only).
- **Python ≥ 3.10** + **[uv](https://docs.astral.sh/uv/)** (`pip install uv`).
- **Presto 2025 instalado Y ABIERTO** para la vía COM (control de la obra en vivo).
El MCP se conecta a la instancia de Presto **en ejecución**; para operar sobre una
obra concreta, **ábrela en Presto** antes. Si tu versión no es la 25, fija el
ProgID con `PRESTO_PROGID` (p. ej. `Presto.App.26`).
- La vía **BC3 NO necesita Presto** (ni instalado ni abierto): solo lee/analiza
ficheros `.bc3`.
- Comprueba la conexión en cualquier momento con la tool **`presto_status`**.
> Resumen rápido: tools `presto_bc3_*` → funcionan siempre (solo ficheros).
> El resto (COM) → requieren **Presto 2025 abierto** en este mismo equipo.
---
## Instalación
Publicado en **PyPI** como [`presto-mcp-server`](https://pypi.org/project/presto-mcp-server/).
`uvx` lo instala y ejecuta sin dejar nada que mantener; `@latest` trae siempre la última versión.
### Opción 1 — con el comando de Claude Code (si tienes el CLI `claude`)
```bash
claude mcp add presto -s user -- uvx presto-mcp-server@latest
```
`-s user` lo deja disponible en **todos los proyectos** de ese PC. Para una versión
de Presto distinta de la 2025: `--env PRESTO_PROGID=Presto.App.26`.
### Opción 2 — sin CLI, editando la configuración a mano
Útil con **Claude Desktop** o si el comando `claude` no existe en el equipo. Añade
el bloque `"presto"` dentro de `mcpServers` y **reinicia la app**:
- **Claude Desktop** → `C:\Users\<usuario>\AppData\Roaming\Claude\claude_desktop_config.json`
(en la app: *Settings → Developer → Edit Config*).
- **Claude Code (config global de usuario)** → `C:\Users\<usuario>\.claude.json`,
bajo la clave raíz `mcpServers`.
```json
{
"mcpServers": {
"presto": {
"command": "uvx",
"args": ["presto-mcp-server@latest"],
"env": { "PRESTO_PROGID": "Presto.App.25" }
}
}
}
```
Reinicia la app **del todo** (en Claude Desktop, ciérrala también desde el icono de
la bandeja del sistema → Quit).
> Si la app **no encuentra `uvx`** (PATH), pon la ruta absoluta como `command`
> (en PowerShell: `where.exe uvx`), con barras dobles `\\` en el JSON.
**Alternativas:**
```bash
# con pip en vez de uv
pip install presto-mcp-server # luego command="python", args=["-m","presto_mcp"]
# sin PyPI, directo de GitHub (no autoactualiza salvo --refresh)
uvx --from git+https://github.com/NeoNexAI/presto-mcp-server presto-mcp
```
Para la vía COM: **abre Presto** (y la obra, si la operación la necesita) antes de
usar las herramientas. Comprueba la conexión con `presto_status`.
---
## Herramientas
### Conexión y obra
| Tool | Qué hace |
|---|---|
| `presto_status` | Comprueba la conexión COM y devuelve el ProgID activo |
| `presto_open_obra` | Abre una obra `.Presto` en la instancia en ejecución |
| `presto_close_obra` | Cierra la obra abierta |
### Genéricas — cobertura del 100% del modelo de datos
| Tool | Qué hace |
|---|---|
| `presto_read_records` | Lee cualquier tabla/campos filtrando por máscara |
| `presto_get_field` | Lee un campo de un registro por su código |
| `presto_set_field` | Escribe un campo (transaccional, deshacible) |
| `presto_execute_option` | Ejecuta cualquier opción interna de Presto (DLG_*) con JSON |
### Curadas — conceptos y precios
| Tool | Qué hace |
|---|---|
| `presto_get_concepto` | Código, unidad, resumen y precios de un concepto |
| `presto_search_conceptos` | Busca conceptos por resumen o código |
| `presto_get_precios` | Precios en todos los esquemas (presupuesto, certificación, real, objetivo, planificado) |
| `presto_set_precio` | Fija el precio de un concepto en un esquema |
| `presto_expresion` | Calcula una expresión del motor de Presto (EvalStr/EvalNum) |
| `presto_tablas` | Lista las tablas que el servidor conoce por su nombre canónico |
| `presto_selftest` | Autodiagnóstico de solo lectura: un informe único OK/FALLO por paso |
### BC3 (FIEBDC-3) — sin Presto
| Tool | Qué hace |
|---|---|
| `presto_bc3_resumen` | Resumen de un fichero BC3 (conceptos, capítulos, emisor) |
| `presto_bc3_buscar` | Busca conceptos por texto en un BC3 |
| `presto_bc3_concepto` | Concepto del BC3 con texto y descomposición |
| `presto_bc3_anomalias` | Precios a 0/ausentes, sin resumen, partidas sin descomposición |
---
## Modelo de datos de Presto (referencia rápida)
La automatización trabaja sobre **tablas.campo**. Los nombres exactos se ven en
Presto con **`Ver: Lista de campos`**. Los más usados:
- Tabla **`Conceptos`**: `Conceptos.Código` (clave única), `Conceptos.Resumen`,
`Conceptos.Ud`, y precios `Conceptos.PrPres` (presupuesto), `PrCert`
(certificación), `PrReal`, `PrObj` (objetivo), `PrPlan` (planificado).
- Filtrado por máscara con comodines de Presto: `"E04*"`, `"*hormigón*"`, `"*"`.
Operaciones masivas (multiplicar precios, reducir niveles, generar objetivo,
exportar/importar formatos…) → `presto_execute_option` con el código del diálogo.
---
## ¿Y Presto ServerCloud (WebAPI REST)?
Presto **de escritorio no expone API REST**. La **WebAPI** (REST sobre HTTP) solo
existe con la licencia **Presto ServerCloud** (suscripción aparte + IIS). Por eso
este MCP usa **COM local** (la vía correcta para escritorio + dongle/pincho).
Si algún día se contrata ServerCloud, **no hace falta un MCP aparte**: se añade a
**este mismo paquete** una capa `presto_webapi_*` que se activa por variables de
entorno (`PRESTO_WEBAPI_URL` / `PRESTO_WEBAPI_USER` / `PRESTO_WEBAPI_PASS`).
Mientras no estén configuradas, el MCP funciona con COM + BC3 como siempre.
→ Un solo MCP, tres backends: **COM** (obra en vivo) · **BC3** (ficheros) ·
**WebAPI** (solo si hay ServerCloud).
## Desarrollo y tests
El reto de este MCP: la vía **COM** solo se puede probar de verdad con Presto
abierto en Windows — y Presto no corre en CI ni en el equipo donde se
desarrolla. Por eso hay **dos niveles de test**, cada uno cubre lo que el otro
no puede:
```bash
pip install pytest
python -m pytest tests/ -v
```
- **`tests/fake_presto_app.py`** — un objeto COM simulado (`FakePrestoApp`) que
reproduce los modos de fallo REALES de la API de Presto: máscara sin
comillas → `"Sintaxis incorrecta en expresión"`, campo no-clave como clave
→ `"Clave incorrecta"`, tabla en minúscula → `"Archivo incorrecto"`. Con él,
`tests/test_presto_com_mock.py` ejercita el flujo completo
(`select`→`iterate`→`get_field`, `read_records` en sus dos vías,
`set_field`/`Rename`) **sin necesitar Presto instalado**. Cualquier
regresión en `presto_com.py` se ve aquí en segundos, antes de publicar.
- **`presto_selftest`** (tool MCP) — para el otro lado del problema: verificar
que una instalación de Presto REAL responde bien. Un solo mensaje del
cliente ("ejecuta `presto_selftest` y pégame el resultado") sustituye a
varias idas y vueltas probando tools sueltas. `tests/test_selftest.py`
prueba su lógica (`_run_selftest`) contra el mock.
```bash
python -m py_compile src/presto_mcp/*.py # comprobar sintaxis
```
**Estado de validación:** parser BC3 (6/6), helpers COM (8/8), flujo COM
completo contra el mock (8/8), autodiagnóstico (4/4) — **26/26 tests**, todos
sin Presto instalado. El servidor MCP **carga y registra 18 tools**. La
conexión COM contra un Presto real solo puede validarse en un equipo con
**Presto 2025 abierto**: para eso está `presto_selftest`, pensado para que esa
última validación sea un solo mensaje, no una sesión de pruebas.
---
## Licencia
MIT · NeoNexAI Agency
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues