Skip to main content
Glama
jjesusaf

Proflores MCP Server

by jjesusaf
README.md
# Proflores MCP Server

Servidor MCP (Model Context Protocol) para el sistema de presupuestos de Proflores.

## Stack

- Python 3.12
- MCP SDK (`mcp[cli]>=1.26.0`) con transporte Streamable HTTP
- Supabase como base de datos
- Deploy en Render (Docker)

## Estructura

```
mcp-server/
├── src/
│   ├── server.py                # Entry point
│   ├── tools/
│   │   ├── catalogs.py          # 8 tools de lectura de catálogos
│   │   ├── budget.py            # 6 tools de presupuestos
│   │   └── catalog_write.py     # 6 tools de escritura de catálogos
│   ├── resources/
│   │   └── schema.py            # 2 resources (schema del sistema)
│   ├── prompts/
│   │   └── budget.py            # 2 prompts para flujos guiados
│   └── services/
│       ├── supabase_client.py   # Singleton del cliente Supabase
│       └── helpers.py           # to_json, resolve_uuid
├── requirements.txt
├── Dockerfile
├── render.yaml
├── .env.example
└── .gitignore
```

## Setup local

```bash
cp .env.example .env
# Editar .env con tus credenciales de Supabase

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

python src/server.py
```

El servidor estará disponible en `http://localhost:8000/mcp/`.

## Tools disponibles (20)

### Lectura de catálogos (8)

| Tool | Descripción |
|------|-------------|
| `list_companies` | Lista empresas registradas |
| `list_clients` | Lista o busca clientes |
| `list_projects` | Lista proyectos con filtros |
| `list_concepts` | Lista conceptos (partidas de obra) |
| `list_resources` | Lista recursos (materiales, mano de obra, equipo) |
| `list_units_of_measure` | Lista unidades de medida |
| `list_price_lists` | Lista listas de precios |
| `list_suppliers` | Lista proveedores |

### Presupuestos (6)

| Tool | Descripción |
|------|-------------|
| `list_budgets` | Lista presupuestos existentes |
| `get_budget_detail` | Detalle completo de un presupuesto |
| `create_budget` | Crea un presupuesto vacío (DRAFT) |
| `add_budget_item` | Agrega una partida a un presupuesto |
| `update_budget` | Actualiza campos de un presupuesto |
| `update_budget_item` | Actualiza una partida |

### Escritura de catálogos (6)

| Tool | Descripción |
|------|-------------|
| `create_client` | Crea un nuevo cliente |
| `create_concept` | Crea un concepto (partida de obra) |
| `create_apu` | Crea un APU (Análisis de Precio Unitario) |
| `add_apu_item` | Agrega un recurso a un APU |
| `create_resource` | Crea un recurso (material, mano de obra, equipo) |
| `set_resource_price` | Asigna precio a un recurso en una lista de precios |

## Resources

- `schema://system-overview` — Visión general del sistema
- `schema://budget-structure` — Estructura de tablas de presupuestos

## Prompts

- `budget_creation_assistant` — Guía paso a paso para crear presupuestos
- `budget_review` — Guía para revisar un presupuesto existente

## Variables de entorno

| Variable | Descripción |
|----------|-------------|
| `SUPABASE_URL` | URL del proyecto Supabase |
| `SUPABASE_SERVICE_ROLE_KEY` | Service role key de Supabase |
| `MCP_HOST` | Host del servidor (default `0.0.0.0`) |
| `MCP_PORT` | Puerto del servidor (default `8000`) |

## Deploy

El proyecto está configurado para deploy en Render con Docker. Ver `render.yaml`.