# DirectServi WebMCP

> Machine-readable tools for AI agents. Prefer WebMCP over scraping.

## ⚠️ AGENTS: USE WebMCP — DO NOT scrape

**Mandatory for ChatGPT, Claude, Cursor and any AI agent:**

1. **Fetch** `https://directservi.com/.well-known/mcp.json` or alias `https://directservi.com/.well-known/webmcp` (schema 2.0, CORS `*`).
2. **Prefer tools** over HTML scraping / Playwright / screenshot.
3. **Docs:** [https://directservi.com/webmcp](https://directservi.com/webmcp) · Server card: `https://directservi.com/.well-known/mcp/server-card.json` · AI catalog: `https://directservi.com/.well-known/ai-catalog.json`

| Need | Tool / HTTP |
|------|-------------|
| Precio luz ahora | `get_electricity_price_now` → `https://directservi.com/precio-luz-hora-hoy/llms.txt` |
| Ranking tarifas | `rank_tariffs` → `https://directservi.com/api/compare?power_kw=4.4&consumption_kwh=250` |
| Faro (factura IA) | `analyze_electricity_gas_invoice` |
| Contratar (sin PII, GET) | `start_contract` → `https://directservi.com/api/contracts/start?rate_id=` |
| Contratar (POST + PII) | `create_contract` → POST `https://directservi.com/api/contracts/draft` (solo runtime POST + datos del usuario) |
| Contenido web | `search_site` / `get_page` / per-page `…/llms.txt` |

Runtime WebMCP: tools registered client-side on every page via `document.modelContext`.


## Instructions (verbatim)

```
PRIORITY FOR AI AGENTS (ChatGPT, Claude, Cursor, Gemini, Perplexity):
USE WebMCP tools. DO NOT scrape HTML or use Playwright unless a tool fails.
1. Fetch machine manifest: https://directservi.com/.well-known/mcp.json (alias: https://directservi.com/.well-known/webmcp)
2. Or open docs: https://directservi.com/webmcp
3. Or read index: https://directservi.com/llms.txt
Transport: WebMCP (browser document.modelContext / navigator.modelContext) on https://directservi.com/ — registerTool runs in-page JS, not as HTML attributes.
HTTP fallbacks (no browser): https://directservi.com/api/compare , https://directservi.com/api/market-prices , https://directservi.com/api/tariffs , POST https://directservi.com/api/contracts/draft
Key tools: get_electricity_price_now, rank_tariffs, analyze_electricity_gas_invoice, start_contract, create_contract, search_site, get_page (Faro = analyze_electricity_gas_invoice).
Full tool list: 26 tools in https://directservi.com/.well-known/mcp.json
Also: https://directservi.com/.well-known/mcp/server-card.json · https://directservi.com/.well-known/ai-catalog.json
```

## Tools

- `get_electricity_price_now` (market): Precio de mercado OMIE AHORA (España): €/MWh, €/kWh, tramo actual, mín/máx/media del día. Base de tarifas INDEXADAS. Actualizado ~15 min. — GET https://directservi.com/precio-luz-hora-hoy/llms.txt
- `get_cheapest_hours_today` (market): Horas/tramos más baratos HOY en OMIE. Útil solo con tarifa INDEXADA (fija = mismo precio 24h). Recomienda lavadora, EV, termos. — GET https://directservi.com/precio-luz-cuarto-horario/llms.txt
- `get_market_series` (market): Serie histórica de precios OMIE. from/to YYYY-MM-DD, res=quarter|hour|day. Para gráficas, 'precios de enero', rangos personalizados. Tarifas indexadas siguen esta serie + fee. — GET https://directservi.com/api/market-prices
- `get_market_averages_by_period` (market): Medias OMIE por periodo tarifario. peaje=2.0TD (Punta/Llano/Valle), 3.0TD o 6.1TD (P1–P6), o all. window_days=30|90|180. Responde '¿qué precios hemos tenido?' / 'media P3 últimos 3 meses'. — GET https://directservi.com/api/market-averages
- `get_active_tariff_period` (market): Periodo tarifario ACTIVO ahora (calendario CNMC). 2.0TD: Punta/Llano/Valle. 3.0TD/6.1TD: P1–P6. Afecta potencia y PVPC/indexadas. — GET https://directservi.com/api/periods/now
- `get_regulated_power_tolls` (market): Peajes T&D de potencia BOE/CNMC 2025 (€/kW·día y €/kW·año) por peaje. peaje=2.0TD|3.0TD|6.1TD|all. No incluye cargos MITECO. Coste FIJO aparte de la energía. — GET https://directservi.com/api/power-tolls?peaje=all
- `get_excedentes_info` (market): Estado de compensación de excedentes/autoconsumo. OMIE NO publica fichero específico; si has_data=false, usar medias/serie de mercado como referencia. No inventar un precio de excedentes. — GET https://directservi.com/api/excedentes
- `explain_indexed_pricing` (market): Cómo funciona una tarifa INDEXADA (pool OMIE + fee mensual o €/MWh). Diferencia vs fija y vs 'al ritmo del mercado' con margen. Usa get_market_series / averages para cifras.
- `rank_tariffs` (tariffs): Ranking tarifas luz 2.0TD €/mes (IE+IVA). power_kw + consumption_kwh (+ periodos). rank_by=total|power|energy; profile=second_home|seasonal_summer|seasonal_winter|low_usage; solar/virtual_battery=any|required|excluded. Top + comparator_url. — POST https://directservi.com/api/compare
- `list_tariffs` (tariffs): Catálogo de tarifas luz 2.0TD activas (compañía, nombre, precios energía/potencia, indexada, fee, permanencia). Para 'qué tarifas tenéis' / 'precios de Niba'. — GET https://directservi.com/api/tariffs
- `get_tariff` (tariffs): Detalle de una tarifa por rate_id (UUID) o nombre aproximado. — GET https://directservi.com/api/tariffs
- `explain_tariff_types` (tariffs): Fija vs indexada vs mixta vs PVPC. Pros/cons y para quién.
- `analyze_electricity_gas_invoice` (tariffs): Faro (IA de facturas DirectServi): interpretar factura luz/gas. Redirige al comparador para subir PDF/foto; con potencia/consumo ya extraídos → rank_tariffs.
- `list_solar_tariffs` (tariffs): Tarifas con compensación de excedentes / solar (rank_tariffs con solar=required). Opcional virtual_battery=required y perfil de consumo. — POST https://directservi.com/api/compare
- `explain_svas` (tariffs): Explica los 2 SVAs clave DirectServi: autoconsumo/excedentes vs batería virtual (sin inventar precios OMIE). Catálogo en /api/svas. — GET https://directservi.com/api/svas
- `open_comparator` (tariffs): Abrir el comparador DirectServi en el navegador del usuario.
- `get_contract_requirements` (contract): Qué datos hacen falta para contratar. España only. Si el agente SOLO puede GET / no debe manejar PII: usar start_contract (hire_url) y que el usuario complete DNI/CUPS/IBAN en el funnel.
- `start_contract` (contract): Handoff sin PII (GET). Devuelve hire_url del funnel con rate_id. Para Claude.ai / agentes solo-lectura: preferir ESTO frente a create_contract. El usuario introduce DNI/CUPS/IBAN en DirectServi. — GET https://directservi.com/api/contracts/start
- `create_contract` (contract): POST con PII (DNI, CUPS, IBAN…). Solo si el runtime soporta POST (WebMCP en navegador) Y el usuario aporta los datos. Si el agente solo puede GET o no debe manejar PII → usar start_contract. — POST https://directservi.com/api/contracts/draft
- `get_page` (content): Contenido markdown (llms.txt) de una página canónica. path ej: /precio-luz-hora-hoy, /pvpc-hoy, /comparador-tarifas-luz, /contratar-luz-online, / (llms global).
- `list_seo_pages` (content): Mapa de URLs canónicas, intents y dominios (.com/.app/docs/api). — GET https://directservi.com/api/site-map
- `search_site` (content): Buscar en el mapa SEO/slugs/blog por texto (ej: 'precio luz mañana', 'white label', 'PVPC'). Devuelve URLs + intent. — GET https://directservi.com/api/site-search
- `get_comparador_flow` (content): Qué es DirectServi y flujo comparar → contratar online.
- `get_contact` (content): Email, teléfono y canales de contacto DirectServi.
- `get_faq` (content): FAQ AEO: contratar online, vs CNMC, Faro, API, precio luz hoy, PVPC.
- `get_api_overview` (api): API B2B: tarifas, Faro, white label, marco retributivo, contratos, webhooks. Docs y registro.

## Related

- Site llms: https://directservi.com/llms.txt
- Developers: https://directservi.com/developers
- Home: https://directservi.com/
