# com.contadeo/mcp (npm · contadeo-mcp)

Contadeo: emite y consulta comprobantes electrónicos del SRI (Ecuador) desde asistentes de IA

- Trust score: 74/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-25

## Components

- remote · `contadeo.com`: 38/100, [markdown](https://verifymcp.io/servers/com-contadeo-mcp/api-mcp.md), [page](https://verifymcp.io/servers/com-contadeo-mcp/api-mcp)
- npm · `contadeo-mcp`: 74/100 (this document), [markdown](https://verifymcp.io/servers/com-contadeo-mcp/contadeo-mcp.md), [page](https://verifymcp.io/servers/com-contadeo-mcp/contadeo-mcp)

## Channel facts

- Registry: `npm`
- Package: `contadeo-mcp`
- Version: `0.25.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-25.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 31 of 97 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 8 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 76/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 13363 tokens (~342/item across 39 items; 39 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 67/100
  - Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 95/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 85% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 39 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 40 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the com.contadeo/mcp server?

com.contadeo/mcp runs locally as an npm package, launched with npx -y contadeo-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add com-contadeo-mcp -- npx -y contadeo-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "com-contadeo-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "contadeo-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-contadeo-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "contadeo-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add com-contadeo-mcp -- npx -y contadeo-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-contadeo-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "contadeo-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-contadeo-mcp --command npx --arg -y --arg contadeo-mcp
```

### Hermes

```yaml
mcp_servers:
  com-contadeo-mcp:
    command: "npx"
    args: ["-y", "contadeo-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "com-contadeo-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "contadeo-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-contadeo-mcp -t stdio -c npx -a -y contadeo-mcp
```

### Other

```json
{
  "mcpServers": {
    "com-contadeo-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "contadeo-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-25 (score 74, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-23 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-21 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-18 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-16 (score 70, +1)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.33 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional] Package version: 0.24.1 → 0.25.0

### 2026-09-14 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-13 (score 68, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-09-06 (score 64, +15)

- [security improvement] Malware scan: unverified → pass

## MCP tools (39)

### `consultar_cuenta` (~154 tokens)

Consultar cuenta y plan

Devuelve la cuenta de Contadeo del usuario: nombre, ambiente activo (1=Pruebas, 2=Producción) y el plan que RIGE su emisión con el consumo del mes (usoPlan.regimen: 'pool' = empresa patrocinada que emite con el plan y el cupo de otra cuenta; lo contratado por ELLA está en usoPlan.propio — no confundas los dos al responder por el plan). Llámalo al inicio de una sesión de facturación o cuando el usuario pregunte por su plan o su cupo. Si la cuenta administra VARIAS empresas trae además el bloque `multiempresa` con todas y cuál está activa: dilo antes de facturar.

### `contexto_emision` (~289 tokens)

Contexto para emitir

Devuelve TODO lo necesario para emitir un comprobante: los emisores (RUC, razón social) con sus establecimientos y puntos de emisión, los certificados de firma disponibles por emisor, y el semáforo `listoParaEmitir` con la lista `porCompletar` de requisitos que faltan (firma electrónica, emisor). LLÁMALO SIEMPRE antes de la primera emisión: si `listoParaEmitir` es false, informa al usuario TODO lo que falta de una vez y resuélvelo ANTES de preparar facturas — no avances por prueba y error. Usa `certificadoIdSugerido` y `serieSugerida` de cada emisor para no inventar IDs. Si la cuenta administra VARIAS empresas la respuesta trae el bloque `multiempresa`: di bajo qué empresa y RUC vas a facturar y confírmalo antes de preparar. OJO: para saber CUÁNDO declarar NO calcules con el RUC de esta respuesta — usa consultar_calendario_tributario.

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…

### `buscar_clientes` (~150 tokens)

Buscar clientes

Lista los clientes del catálogo, opcionalmente filtrados por texto (busca en razón social e identificación). Úsalo para obtener la identificación y datos de un comprador antes de emitir una factura.

Input parameters:

- `consulta` (string): Texto a buscar (nombre o cédula/RUC). Vacío = todos.
- `cuenta` (string): Opcional: tenantId de otra de tus empresas. EL CATÁLOGO ES POR EMPRESA (cada una tiene sus clientes y sus productos con sus precios): si vas a facturar por otra empresa, busca y crea SIEMPRE con la M…

### `buscar_productos` (~210 tokens)

Buscar productos

Lista los productos/servicios del catálogo, opcionalmente filtrados por texto (código o descripción). Cada producto trae su precio unitario, su tarifa de IVA y sus existencias (`stock`; null = sin control, típico en servicios; puede ser negativo), más categoría y unidad. Los archivados (activo=false) no aparecen. Es un inventario ligero SIN historial de movimientos. Úsalo para armar los detalles de una factura con precios correctos o para responder cuánto queda de un producto.

Input parameters:

- `consulta` (string): Texto a buscar (código o nombre). Vacío = todos.
- `cuenta` (string): Opcional: tenantId de otra de tus empresas. EL CATÁLOGO ES POR EMPRESA (cada una tiene sus clientes y sus productos con sus precios): si vas a facturar por otra empresa, busca y crea SIEMPRE con la M…

### `preparar_factura` (~532 tokens)

Preparar factura (calcula y cuadra)

Construye UNA factura LISTA con toda la matemática tributaria hecha por el servidor: calcula líneas, agrupa el IVA por tarifa, cuadra totales con redondeo oficial y valida la identificación del comprador (dígito verificador) y el límite de consumidor final. NO emite nada. LLÁMALO SIEMPRE en lugar de calcular tú los montos; para 2 o más facturas usa preparar_lote. PROTOCOLO: 1) contexto_emision para los IDs, 2) preparar_factura, 3) MUESTRA el campo 'resumen' al usuario y espera su confirmación explícita de ESTA factura — una instrucción general previa no cuenta como confirmación, 4) emitir_factura con el 'payload' EXACTO devuelto (incluye idempotencyKey, que evita duplicados al reintentar, y la fechaEmision dentro de infoFactura si la pediste). Si el usuario indicó una fecha pasada, verifica que aparezca en el resumen antes de pedir la confirmación.

Input parameters:

- `comprador` (object, required): Comprador: usa clienteId del catálogo O los datos directos.
- `cuenta` (string): Opcional: tenantId de OTRA de tus empresas para EMITIR bajo su RUC (v0.23.0). Debe ser el MISMO en preparar_* y en emitir_*: el confirmToken lo ata y un payload preparado para una empresa NO se puede…
- `fechaEmision` (string): Solo para emitir con fecha PASADA (YYYY-MM-DD, calendario de Ecuador; la API rechaza futuras y más de 5 días atrás). Omitir = hoy.
- `formaPago` (string, required): Tabla 24: '15'=Compensación de deudas (cruce de cuentas); '16'=Tarjeta de débito; '17'=Dinero electrónico (billetera móvil); '18'=Tarjeta prepago (gift card); '19'=Tarjeta de crédito (Visa/Mastercard…
- `items` (array, required)
- `propina` (number)

### `emitir_factura` (~532 tokens)

Emitir factura electrónica

Emite la factura: se firma con el certificado del emisor y se transmite al SRI. Es un DOCUMENTO TRIBUTARIO — llámalo SOLO después de que el usuario vio el resumen de preparar_factura y confirmó explícitamente ESA factura; nunca emitas amparado en una autorización genérica dada antes de mostrar el resumen. El payload (infoFactura + detalles + idempotencyKey + confirmToken) debe venir de preparar_factura sin modificarlo; este tool re-valida el cuadre y el confirmToken localmente y rechaza si el payload no cuadra, fue modificado a mano o el resumen confirmado expiró. Si un intento anterior falló por red o timeout, reintenta con el MISMO payload: el idempotencyKey evita duplicados y secuenciales quemados. Respuesta 202 (asíncrona): usa esperar_autorizacion después. Para lotes confirmados usa emitir_lote.

Input parameters:

- `certificadoId` (string, required): UUID del certificado de firma (de contexto_emision)
- `confirmToken` (string): Token devuelto por preparar_factura; reenvíalo tal cual. Ata la emisión al resumen preparado: bloquea payloads modificados a mano y resúmenes rancios.
- `cuenta` (string): Opcional: tenantId de OTRA de tus empresas para EMITIR bajo su RUC (v0.23.0). Debe ser el MISMO en preparar_* y en emitir_*: el confirmToken lo ata y un payload preparado para una empresa NO se puede…
- `detalles` (array, required): detalles calculados por preparar_factura
- `emisorId` (string, required): UUID del emisor (de contexto_emision)
- `establecimiento` (string, required): Código de 3 dígitos, p. ej. '001'
- `idempotencyKey` (string): Clave generada por preparar_factura; reenvíala tal cual — un reintento con la misma clave no quema secuencial ni duplica la factura.
- `infoAdicional` (array)
- `infoFactura` (object, required): infoFactura calculada por preparar_factura (puede traer fechaEmision YYYY-MM-DD dentro)
- `puntoEmision` (string, required): Código de 3 dígitos, p. ej. '001'

### `preparar_lote` (~464 tokens)

Preparar lote de facturas (calcula y cuadra)

Construye VARIAS facturas de una vez (máximo 25) con toda la matemática hecha por el servidor: cada una se calcula y cuadra igual que en preparar_factura, y además devuelve un resumen AGREGADO (tabla por factura + totales del lote). NO emite nada. El comprador, la forma de pago y la fechaEmision pueden ser comunes al lote o indicarse por factura (el valor por factura REEMPLAZA al común, sin mezclar campos). PROTOCOLO DE CONFIRMACIÓN MASIVA: muestra al usuario el resumenAgregado COMPLETO y pide UNA confirmación explícita del lote entero ANTES de llamar a emitir_lote — nunca emitas ninguna factura del lote sin esa confirmación, aunque exista una instrucción general previa. Si el usuario quiere cambiar una factura, corrige y vuelve a preparar el lote completo. Cada payload trae su idempotencyKey: consérvalos intactos para emitir_lote y para cualquier reintento.

Input parameters:

- `comprador` (object): Comprador común a todo el lote. Cada factura puede traer el suyo, que lo REEMPLAZA por completo.
- `cuenta` (string): Opcional: tenantId de OTRA de tus empresas para EMITIR bajo su RUC (v0.23.0). Debe ser el MISMO en preparar_* y en emitir_*: el confirmToken lo ata y un payload preparado para una empresa NO se puede…
- `facturas` (array, required): Máximo 25 facturas por lote; para más, trocea.
- `fechaEmision` (string): Solo para emitir con fecha PASADA (YYYY-MM-DD, calendario de Ecuador; la API rechaza futuras y más de 5 días atrás). Omitir = hoy.
- `formaPago` (string): Forma de pago común al lote (Tabla 24); sobrescribible por factura. Guía: efectivo='01'; transferencia, depósito o cheque='20'; tarjeta de crédito='19'.

### `emitir_lote` (~398 tokens)

Emitir lote de facturas

Emite en secuencia las facturas de un lote preparado con preparar_lote (máximo 25). Son DOCUMENTOS TRIBUTARIOS — llámalo SOLO después de que el usuario confirmó explícitamente el resumenAgregado del lote entero; una confirmación por lote basta, pero tiene que existir y ser sobre el resumen mostrado. Primero re-valida el cuadre Y el confirmToken de TODAS localmente: si alguna no cuadra o su token no coincide/expiró, NO se emite ninguna. Luego emite una a una (202 asíncrona); si una falla, continúa con las siguientes y lo reporta — salvo error de credencial, cupo o rate limit (401/402/429), donde se detiene y marca el resto NO_INTENTADA. Después llama a esperar_autorizacion con el array `ids` de las encoladas (timeout sugerido 90). Reintentos: vuelve a llamar solo con las fallidas, conservando cada idempotencyKey (no se duplican facturas ni se queman secuenciales).

Input parameters:

- `certificadoId` (string, required)
- `cuenta` (string): Opcional: tenantId de OTRA de tus empresas para EMITIR bajo su RUC (v0.23.0). Debe ser el MISMO en preparar_* y en emitir_*: el confirmToken lo ata y un payload preparado para una empresa NO se puede…
- `emisorId` (string, required)
- `establecimiento` (string, required)
- `facturas` (array, required): El array `facturas` que devolvió preparar_lote, tal cual.
- `puntoEmision` (string, required)

### `preparar_nota_credito` (~548 tokens)

Preparar nota de crédito (calcula y cuadra)

Construye una NOTA DE CRÉDITO (comprobante 04) que revierte una factura autorizada — la vía legal para 'anular' cuando ya no aplica la anulación (p. ej. fuera del plazo del día 7). NO emite nada; el servidor hace toda la matemática. Dos modos: (1) REVERSO TOTAL — pasa `comprobanteId` (la factura) y `motivo`, y se acredita el 100% (deriva comprador, referencia y el IVA del original); (2) EXPLÍCITO/PARCIAL — pasa `comprador`, `items` a acreditar, la referencia `documentoModificado` y `motivo`. PROTOCOLO: muestra el `resumen` al usuario y espera confirmación explícita; solo entonces llama a emitir_nota_credito con el 'payload' EXACTO (incluye idempotencyKey y confirmToken). REQUISITO: el SRI RECHAZA una NC a consumidor final (error 69) — exige un receptor identificado (RUC, cédula o pasaporte); una factura emitida a consumidor final NO se puede acreditar.

Input parameters:

- `comprador` (object): Comprador de la NC (modo explícito); con comprobanteId se deriva.
- `comprobanteId` (string): UUID de la factura a acreditar. Sin `items` = reverso TOTAL (100%). Deriva comprador, referencia e IVA del original.
- `cuenta` (string): Opcional: tenantId de OTRA de tus empresas para EMITIR bajo su RUC (v0.23.0). Debe ser el MISMO en preparar_* y en emitir_*: el confirmToken lo ata y un payload preparado para una empresa NO se puede…
- `documentoModificado` (object): Referencia a la factura cuando NO usas comprobanteId (modo explícito).
- `fechaEmision` (string): Solo para emitir con fecha PASADA (YYYY-MM-DD, calendario de Ecuador; la API rechaza futuras y más de 5 días atrás). Omitir = hoy.
- `items` (array): Líneas a acreditar (crédito parcial/custom). Si se omiten y hay comprobanteId, se hace el reverso TOTAL de la factura.
- `motivo` (string, required): Razón de la nota de crédito (obligatoria en el SRI).

### `emitir_nota_credito` (~417 tokens)

Emitir nota de crédito

Emite la nota de crédito: se firma con el certificado del emisor y se transmite al SRI (documento tributario REAL que revierte la factura). Llámalo SOLO tras mostrar el resumen de preparar_nota_credito y recibir confirmación explícita. El payload (infoNotaCredito + detalles + idempotencyKey + confirmToken) debe venir de preparar_nota_credito sin modificarlo; este tool re-valida el cuadre y el confirmToken localmente y rechaza si no cuadra, fue modificado a mano o el resumen expiró. Respuesta 202 (asíncrona): usa esperar_autorizacion después. Reintentos con el MISMO payload: el idempotencyKey evita duplicados.

Input parameters:

- `certificadoId` (string, required): UUID del certificado de firma (de contexto_emision)
- `confirmToken` (string): Token de preparar_nota_credito; reenvíalo tal cual.
- `cuenta` (string): Opcional: tenantId de OTRA de tus empresas para EMITIR bajo su RUC (v0.23.0). Debe ser el MISMO en preparar_* y en emitir_*: el confirmToken lo ata y un payload preparado para una empresa NO se puede…
- `detalles` (array, required): detalles calculados por preparar_nota_credito
- `emisorId` (string, required): UUID del emisor (de contexto_emision)
- `establecimiento` (string, required)
- `idempotencyKey` (string): Clave de preparar_nota_credito; reenvíala tal cual.
- `infoAdicional` (array)
- `infoNotaCredito` (object, required): infoNotaCredito calculada por preparar_nota_credito
- `puntoEmision` (string, required)

### `crear_cliente` (~220 tokens)

Crear cliente en el catálogo

Da de alta un cliente (comprador) en el catálogo de la cuenta. Valida la cédula/RUC localmente (dígito verificador) antes de enviar. Úsalo cuando buscar_clientes no encuentre al comprador, o para registrar varios clientes que el usuario dicte o pegue.

Input parameters:

- `cuenta` (string): Opcional: tenantId de otra de tus empresas. EL CATÁLOGO ES POR EMPRESA (cada una tiene sus clientes y sus productos con sus precios): si vas a facturar por otra empresa, busca y crea SIEMPRE con la M…
- `direccion` (string)
- `email` (string)
- `identificacion` (string, required)
- `razonSocial` (string, required)
- `telefono` (string)
- `tipoIdentificacion` (string, required): '04' RUC, '05' cédula, '06' pasaporte, '08' id. exterior

### `crear_producto` (~306 tokens)

Crear producto en el catálogo

Da de alta un producto o servicio en el catálogo: código único, nombre, precio unitario (sin IVA) y tarifa de IVA; opcionalmente existencias iniciales, categoría y unidad. Con el catálogo poblado, las facturas se preparan por productoId sin reescribir precios. Úsalo para registrar el inventario que el usuario dicte.

Input parameters:

- `categoria` (string)
- `codigoAuxiliar` (string)
- `codigoPrincipal` (string, required): Código único del producto en la cuenta, p. ej. 'CONS-001'
- `cuenta` (string): Opcional: tenantId de otra de tus empresas. EL CATÁLOGO ES POR EMPRESA (cada una tiene sus clientes y sus productos con sus precios): si vas a facturar por otra empresa, busca y crea SIEMPRE con la M…
- `nombre` (string, required)
- `precioUnitario` (number, required): Precio SIN IVA
- `stock` (number): Existencias iniciales. Omite el campo si no controla stock (servicios). Al facturar se descuenta solo.
- `stockMinimo` (number): Umbral de alerta de bajo stock
- `tarifaCodigo` (string): Tarifa IVA (Tabla 18). Default '4' = 15%. '0' = 0%.
- `unidadMedida` (string)

### `ajustar_stock` (~287 tokens)

Ajustar existencias de un producto

Ajusta las existencias de un producto del inventario por su código: relativo con `ajuste` (+ entra mercadería, - sale) o absoluto con `stock` (fijar el total tras un conteo físico; null = quitar el control de existencias). Prefiere `ajuste`: es atómico frente al descuento automático de las facturas. Inventario ligero: mueve el número actual, NO lleva historial de movimientos (kardex). No lo uses por una venta o devolución con comprobante: la factura y la nota de crédito ya mueven el stock solas.

Input parameters:

- `ajuste` (number): Delta relativo: + entra, - sale. Excluyente con `stock`.
- `codigoPrincipal` (string, required): Código del producto en el catálogo
- `cuenta` (string): Opcional: tenantId de otra de tus empresas. EL CATÁLOGO ES POR EMPRESA (cada una tiene sus clientes y sus productos con sus precios): si vas a facturar por otra empresa, busca y crea SIEMPRE con la M…
- `motivo` (string): Solo informativo; se devuelve en la respuesta
- `stock` (number|null): Valor absoluto tras un conteo; null quita el control. Excluyente con `ajuste`.

### `consultar_reglas_sri` (~77 tokens)

Reglas y catálogos del SRI

Devuelve las tablas de referencia oficiales que aplican a la facturación electrónica en Ecuador: tipos de identificación, tarifas de IVA vigentes, formas de pago, regla de consumidor final y ventana de anulación. Consúltalo en vez de responder de memoria cuando el usuario pregunte por códigos, tarifas o reglas del SRI.

### `listar_comprobantes` (~232 tokens)

Listar comprobantes

Lista los comprobantes emitidos, con filtros opcionales por estado (AUTORIZADO, RECHAZADO, DEVUELTA, ENVIADO, ANULADO...), ambiente y emisor. Úsalo cuando el usuario pregunte por sus facturas o el estado de emisiones recientes. Cada fila trae su `ambiente`: la lista puede mezclar Pruebas y Producción, así que léelo por fila antes de sacar conclusiones sobre lo que el usuario declaró de verdad.

Input parameters:

- `ambiente` (number): 1=Pruebas, 2=Producción. Sin filtro salen los dos.
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string)
- `estado` (string): Filtro por estado del comprobante
- `limite` (integer): Default 20

### `consultar_comprobante` (~181 tokens)

Consultar un comprobante

Devuelve el detalle y estado actual de un comprobante por su ID: estado, número completo, clave de acceso, número de autorización del SRI, fechas, totales y mensajes de error si fue rechazado. Con eventos:true incluye además el timeline paso a paso de la emisión (firmado, enviado, respuesta del SRI, reintentos, contingencia) — úsalo para explicar en qué punto está una emisión lenta o por qué falló.

Input parameters:

- `cuenta` (string): Opcional: tenantId de la empresa bajo la que se emitió. Si emitiste con `cuenta`, PÁSALA TAMBIÉN AQUÍ o el comprobante no aparece (cada empresa ve solo los suyos).
- `eventos` (boolean): true = incluye el timeline completo de la emisión
- `id` (string, required): comprobanteId

### `esperar_autorizacion` (~331 tokens)

Esperar autorización del SRI

Hace polling de uno o VARIOS comprobantes hasta que el SRI los resuelva (AUTORIZADO, RECHAZADO, DEVUELTA o ANULADO) o se agote el tiempo. Llámalo inmediatamente después de emitir_factura (parámetro `id`) o de emitir_lote (parámetro `ids` con todos los comprobanteId encolados; timeout sugerido 90). El SRI suele resolver en 5–30 segundos. Si se agota el tiempo NO es un error: la respuesta trae el estado intermedio actual (BORRADOR, FIRMADO, ENVIADO o CONTINGENCIA) — repórtaselo al usuario y vuelve a llamar, o usa consultar_comprobante con eventos:true para ver el timeline completo. Los comprobantes que queden AUTORIZADO traen `descargas` con las URLs temporales del RIDE (PDF) y el XML autorizado: compártelas con el usuario sin llamar a descargar_ride/descargar_xml.

Input parameters:

- `cuenta` (string): Opcional: tenantId de la empresa bajo la que se emitió. Si emitiste con `cuenta`, PÁSALA TAMBIÉN AQUÍ o el comprobante no aparece (cada empresa ve solo los suyos).
- `id` (string): comprobanteId devuelto por emitir_factura
- `ids` (array): comprobanteIds de un lote (emitir_lote)
- `timeoutSegundos` (integer): Máximo a esperar (default 45; para lotes usa 90–120)

### `descargar_ride` (~109 tokens)

Obtener PDF (RIDE)

Devuelve una URL temporal (expira en 1 hora) para descargar el RIDE (PDF) de un comprobante AUTORIZADO. Comparte la URL con el usuario.

Input parameters:

- `cuenta` (string): Opcional: tenantId de la empresa bajo la que se emitió. Si emitiste con `cuenta`, PÁSALA TAMBIÉN AQUÍ o el comprobante no aparece (cada empresa ve solo los suyos).
- `id` (string, required): comprobanteId

### `descargar_xml` (~98 tokens)

Obtener XML autorizado

Devuelve una URL temporal (expira en 1 hora) para descargar el XML autorizado por el SRI de un comprobante.

Input parameters:

- `cuenta` (string): Opcional: tenantId de la empresa bajo la que se emitió. Si emitiste con `cuenta`, PÁSALA TAMBIÉN AQUÍ o el comprobante no aparece (cada empresa ve solo los suyos).
- `id` (string, required): comprobanteId

### `reporte_ventas` (~181 tokens)

Reporte de ventas

Agregados de ventas del período (default: mes en curso): conteo por estado, total facturado autorizado, desglose por tipo de comprobante y por mes. Úsalo cuando el usuario pida resúmenes o cifras de ventas. Para comparar ingresos contra los límites del RIMPE usa consultar_semaforo_rimpe (no lo calcules tú).

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `desde` (string): Fecha YYYY-MM-DD
- `emisorId` (string)
- `hasta` (string): Fecha YYYY-MM-DD

### `consultar_retenciones` (~301 tokens)

Retenciones practicadas (como agente de retención)

Retenciones que TU emisor practicó a otros en un mes (Renta, IVA, ISD): detalle línea a línea y totales por tipo. Es insumo para el ATS de compras. OJO CON EL SENTIDO: son las retenciones que tú HICISTE al pagar, no las que TE hicieron tus clientes al cobrarles — esas constan en los comprobantes de retención que ellos te emitieron y se descuentan en tu declaración. Si el usuario pregunta por 'lo que me retuvieron', aclárale esa diferencia. Solo contiene datos desde jun-2026. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer, required): Año del período (p. ej. 2026).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores
- `mes` (integer, required): Mes del período (1=enero, 12=diciembre).

### `mi_situacion_tributaria` (~325 tokens)

¿Cómo voy? — situación de la cuenta

El panorama COMPLETO de la cuenta en una sola llamada: si está lista para emitir (emisor + firma electrónica vigente), qué declaraciones vencen pronto, el semáforo del límite RIMPE y un `resumen` ya redactado en lenguaje llano. ÚSALO al empezar una sesión, cuando el usuario pregunte '¿cómo voy?', '¿qué me toca este mes?', '¿estoy al día?' o cualquier cosa sobre su estado, en vez de encadenar consultar_cuenta + consultar_obligaciones + consultar_semaforo_rimpe. Lee el campo `resumen` al usuario tal cual antes de entrar en detalles: ya está escrito para alguien sin formación tributaria. Si `listoParaEmitir` es false, resuelve `porCompletar` ANTES de preparar cualquier factura. El consolidado es de UNA empresa: si aparece el bloque `multiempresa`, aclara de cuál estás hablando y que las demás llevan cuentas aparte. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…

### `explicar_termino` (~282 tokens)

Explicar un término tributario

Glosario del SRI en lenguaje llano: RIDE, clave de acceso, RIMPE, retención, crédito tributario, consumidor final, punto de emisión, firma electrónica, F104, nota de crédito, ambiente de pruebas… ÚSALO SIEMPRE que el usuario pregunte qué significa un término, o cuando detectes que no lo entiende, EN VEZ de explicarlo de memoria: en materia tributaria ecuatoriana un matiz equivocado suena igual de convincente que el dato correcto. Acepta el término tal como lo escribió el usuario, incluso coloquial ('el pdf de la factura', 'me retuvieron'). Sin `termino` devuelve el glosario completo, útil para orientar a alguien que recién empieza. Si un término trae `consultaCon`, llama a esa herramienta para dar la cifra vigente en vez de citar números de memoria.

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `termino` (string): Término a explicar, tal como lo dijo el usuario. Vacío = glosario completo.

### `consultar_calendario_tributario` (~218 tokens)

Calendario tributario del emisor

Próximos vencimientos de declaraciones (IVA mensual o semestral RIMPE, renta, retenciones, ATS) según el noveno dígito del RUC y el régimen del emisor, con fecha límite y días restantes. Úsalo cuando el usuario pregunte cuándo le toca declarar o qué vence pronto. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores
- `horizonteDias` (integer)

### `consultar_semaforo_rimpe` (~246 tokens)

Semáforo de límites RIMPE

Proyecta los ingresos anuales del emisor (lo facturado en Contadeo: facturas + notas de débito − notas de crédito autorizadas) frente a los límites del RIMPE y devuelve VERDE/AMARILLO/ROJO (o NO_APLICA en régimen general). Úsalo cuando el usuario pregunte cómo va con el límite de su régimen o si le conviene cambiarse. Aclara siempre que solo ve lo facturado en Contadeo. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores

### `consultar_obligaciones` (~200 tokens)

Obligaciones tributarias del emisor

Checklist de obligaciones según el perfil del emisor (régimen, obligado a contabilidad, contribuyente especial, persona natural o sociedad): qué declaraciones y anexos le tocan y cuáles no. Los ítems con aValidar:true están en revisión normativa — díselo al usuario. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores

### `consultar_f104` (~454 tokens)

Borrador F104 (IVA) explicado

Borrador del F104 (declaración de IVA) del período, EXPLICADO. Además de las cifras del servidor (débito 429, crédito 564, impuesto causado 601, retenciones 609, a pagar 902 o crédito 615, vencimiento según régimen: mensual general, semestral RIMPE Emprendedor, null si no declara IVA), la respuesta trae `resumen_ejecutivo` (una frase en español llano: muéstrala), `desglose_explicado` (paso a paso anclado a los casilleros del formulario oficial), `alertas` (observaciones proactivas: ventas con IVA 0, factor 563, crédito del mes anterior sin descontar, compras faltantes: muéstralas TODAS) y `proyeccion_proximo_mes` (qué se arrastra al 605/483 y por qué). No es la declaración oficial. Cuando el usuario pregunte POR QUÉ un número da lo que da, complementa con consultar_libro_ventas / consultar_libro_compras (el detalle comprobante a comprobante); para la versión narrada para principiantes usa explicar_f104; antes de declarar sugiere validar_f104; para '¿qué pasa si...?' usa simular_f104. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer, required): Año del período a calcular (p. ej. 2026).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores.
- `mes` (integer, required): Mes del período (1=enero, 12=diciembre).

### `consultar_f103` (~355 tokens)

Auxiliar F103 (retenciones en la fuente de renta)

Auxiliar de la declaración mensual de retenciones en la fuente de RENTA (formulario 103) que TU emisor practicó al pagar: agrupa por código de retención del SRI (`baseImponible`, `valor` y `cantidad` de líneas por código), más totales y el vencimiento del período (según el catálogo; null si tu perfil no tiene la obligación — hoy solo la tienen los contribuyentes especiales). Excluye la retención de IVA (esa va al F104/ATS, no al 103). No es la declaración oficial: el mapeo código→casillero lo confirma tu contador (`aValidar: true`). Para el detalle línea a línea (con el RUC del sujeto retenido) usa consultar_retenciones. Muestra SIEMPRE el campo `disclaimer` de la respuesta. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer, required): Año del período (p. ej. 2026).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores.
- `mes` (integer, required): Mes del período (1=enero, 12=diciembre).

### `consultar_ats` (~494 tokens)

Borrador del Anexo Transaccional Simplificado (ATS)

Borrador de SOLO LECTURA del Anexo Transaccional Simplificado del período: conteos por sección (compras, ventas, ventas por establecimiento, anulados), los totales de cabecera, el informe de validación contra la ficha técnica del SRI (reglas V1-V17 y N1-N9, con severidad, ruta y mensaje), las filas que quedaron EXCLUIDAS del anexo con su motivo, y las brechas conocidas del producto (lo que le falta a Contadeo, no al anexo). También dice si el período YA tiene un anexo generado y archivado (bloque `snapshot`, resuelto contra el historial) y con qué huella. NUNCA devuelve el XML ni el ZIP del anexo: llevan la identificación de todos los clientes y proveedores del período, y esos solo se descargan desde el panel. El período es mensual (`mes`, 1-12) o semestral (`semestre`: 1=enero-junio, 2=julio-diciembre) — el semestral es una OPCIÓN del contribuyente RIMPE, no un dato de su régimen: confírmalo con el usuario, no lo asumas. Requiere el módulo ATS contratado (402 si la cuenta no lo tiene). Muestra SIEMPRE el campo `disclaimer` de la respuesta.

Input parameters:

- `anio` (integer, required): Año del período (p. ej. 2026).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string, required): Id del emisor (RUC) del que quieres el anexo. Sale de contexto_emision.
- `mes` (integer): Mes del período (1=enero, 12=diciembre). Pasa esto o `semestre`, no los dos.
- `semestre` (integer): Semestral del RIMPE: 1 (enero-junio) o 2 (julio-diciembre). Es una opción del contribuyente, no un dato de su régimen. Pasa esto o `mes`, no los dos.

### `explicar_f104` (~488 tokens)

Explicar la declaración de IVA (F104)

Explica el F104 casillero por casillero, al nivel de alguien que NUNCA ha declarado: la ecuación completa (IVA cobrado 429 − crédito de compras 564 = impuesto causado 601; menos saldo del mes anterior 605 y retenciones 609 = a pagar 902 o crédito 615), por qué unas ventas altas pueden dar IVA generado $0 (ventas a crédito 480-486 cuyo IVA aparece el mes siguiente en el 483, o ventas tarifa 0%), qué es el factor de proporcionalidad (563) y por qué acumular crédito no es ganar. Dos modos: (a) con `anio` y `mes` narra el borrador de Contadeo de ese período; (b) con `cifras` narra números que el usuario pegó de una declaración (suya o ya presentada en el SRI), con chequeos aritméticos suaves; los casilleros que no reconoce los lista sin inventarles significado. Úsalo cuando el usuario pregunte qué significa un campo, por qué paga lo que paga, o pegue su formulario. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer): Año del período a explicar (junto con `mes`). Omítelo si pasas `cifras`.
- `cifras` (object): Cifras pegadas de una declaración: casillero → valor en USD, p. ej. {"429": 184.59, "564": 21.50, "902": 36.27}. Si vienen, se explican ESTAS cifras y no se consulta el borrador.
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores.
- `mes` (integer): Mes del período (1=enero, 12=diciembre).

### `simular_f104` (~497 tokens)

Simular escenarios del F104 (IVA)

Responde '¿qué pasa si...?' sobre el borrador del F104 del período: 'si facturo $500 más este mes, ¿cuánto más pago?', '¿y si registro $200 más de compras?', '¿y si paso ventas a crédito?'. Devuelve las cifras base vs simuladas, la `diferencia` del total a pagar (902) y del crédito (615), y una `explicacion` en una frase. Montos en USD: las bases del escenario se gravan con la tarifa general VIGENTE del catálogo del servidor (nunca la asumas tú). Es una ESTIMACIÓN educativa: no aplica el factor 563 ni saldos de declaraciones anteriores (605). Muestra SIEMPRE los `supuestos` y el `disclaimer` al usuario. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer, required): Año del período base (p. ej. 2026).
- `comprasAdicionales` (number): Base gravada adicional de COMPRAS del negocio en USD, sin IVA (gastos con factura al RUC que sumarían crédito).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores.
- `mes` (integer, required): Mes del período base (1=enero, 12=diciembre).
- `retencionAdicional` (number): Retención de IVA adicional (USD) que esperas que te practiquen tus clientes agentes de retención.
- `ventasACredito` (number): Base de ventas gravadas de ESTE período que pasarías de contado a crédito: su IVA se difiere al mes siguiente (480-486 / 483).
- `ventasAdicionales` (number): Base gravada adicional de VENTAS en USD, sin IVA (p. ej. 500 = 'si facturo $500 más').

### `validar_f104` (~402 tokens)

Validar el F104 antes de declarar

Chequeo previo a la declaración: cruza el borrador del F104 contra los libros de ventas y compras del período y detecta inconsistencias ANTES de declarar: IVA del borrador que no cuadra con los libros (¿comprobantes emitidos fuera de Contadeo?), compras sin comprobante autorizado (crédito que no se sustenta), notas de crédito emitidas por compensar (443/453) y gastos posiblemente no registrados. Con `cifrasADeclarar` (casillero → valor: 429, 564, 601, 609, 902, 615) además compara lo que el usuario piensa declarar contra el borrador y explica cada diferencia. Muestra al usuario todos los chequeos en `alerta` o `revisar` y la `conclusion`. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer, required): Año del período a validar (p. ej. 2026).
- `cifrasADeclarar` (object): Opcional: casillero → valor en USD que el usuario piensa declarar (p. ej. {"429": 184.59, "902": 36.27}) para compararlo contra el borrador.
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores.
- `mes` (integer, required): Mes del período (1=enero, 12=diciembre).

### `consultar_ruc` (~268 tokens)

Consultar RUC o cédula

Autocompleta los datos de un comprador a partir de su RUC (13 díg.) o cédula (10 díg.): busca primero en tu directorio y, si no está, en el catastro público del SRI — devuelve razón social, dirección y régimen. Trae `advertencias` (p. ej. contribuyente FANTASMA, inactivo o con transacciones inexistentes): MUÉSTRALAS al usuario antes de facturarle, para evitar rechazos del SRI. Úsalo antes de preparar_factura cuando solo tengas el número; si no hay datos, pide los del comprador o usa crear_cliente.

Input parameters:

- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `identificacion` (string, required): RUC (13 dígitos) o cédula (10 dígitos) del comprador.
- `tipo` (string): Tipo de identificación: '04' = RUC (13 díg.), '05' = cédula (10 díg.).

### `anular_comprobante` (~300 tokens)

Anular una factura

Marca una factura AUTORIZADA como ANULADA en Contadeo (registro interno; el trámite formal ante el SRI se realiza en su portal). Si la factura ya no admite anulación (fuera del plazo legal o emitida a consumidor final), NO la anules: reversa con una NOTA DE CRÉDITO (preparar_nota_credito / emitir_nota_credito). Una factura con TRANSACCIONES ASOCIADAS vivas —notas de crédito o débito que la modifican y no están anuladas, o comprobantes de retención recibidos conciliados con ella— devuelve 400 con la lista en `problemas`: hay que desarmarlas en orden inverso (primero lo que cuelga, después la factura) y volver a intentarlo; las retenciones las anula el cliente que las emitió, no el titular de la cuenta. Es una acción sensible: confírmala explícitamente con el usuario antes de llamarla.

Input parameters:

- `comprobanteId` (string, required): UUID de la factura a anular (de listar_comprobantes).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…

### `reenviar_comprobante` (~174 tokens)

Reenviar comprobante por email

Reenvía por correo el comprobante (RIDE/XML) de una factura AUTORIZADA a su receptor, o a otro correo si indicas `para`. Útil cuando el cliente dice que no le llegó. Solo aplica a comprobantes ya autorizados por el SRI.

Input parameters:

- `comprobanteId` (string, required): UUID del comprobante autorizado (de listar_comprobantes).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `para` (string): Correo destino. Si se omite, se usa el del comprobante.

### `consultar_libro_ventas` (~272 tokens)

Libro de ventas

Libro de ventas del período: comprobantes emitidos AUTORIZADOS con sus bases de IVA y totales — insumo para la declaración y el ATS. Devuelve las líneas y los totales del mes. Es el detalle detrás del IVA de ventas (429) del F104: úsalo cuando el usuario pregunte POR QUÉ su débito da lo que da o qué comprobante mueve el total; validar_f104 hace este cruce automáticamente. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer, required): Año del período (p. ej. 2026).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores.
- `mes` (integer, required): Mes del período (1=enero, 12=diciembre).

### `consultar_libro_compras` (~275 tokens)

Libro de compras

Libro de compras del período: comprobantes recibidos de proveedores con sus bases de IVA, retenciones y totales — insumo para el crédito tributario y el ATS. Devuelve las líneas y los totales del mes. Es el detalle detrás del crédito tributario (564) del F104: úsalo cuando el usuario pregunte POR QUÉ su crédito da lo que da o si le falta registrar algún gasto; validar_f104 hace este cruce automáticamente. NUNCA calcules ni inventes fechas, límites u obligaciones: este tool devuelve los valores vigentes del servidor de Contadeo. Incluye SIEMPRE el campo `disclaimer` de la respuesta en tu mensaje al usuario.

Input parameters:

- `anio` (integer, required): Año del período (p. ej. 2026).
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): Solo necesario si la cuenta tiene varios emisores.
- `mes` (integer, required): Mes del período (1=enero, 12=diciembre).

### `registrar_compra` (~382 tokens)

Registrar una compra (el IVA lo calcula el servidor)

Registra un comprobante que TE FACTURARON, para que su IVA cuente en el crédito tributario (casillero 564) de tu declaración. Pasa la BASE imponible y el CÓDIGO de tarifa; NUNCA calcules el IVA tú: lo deriva el servidor con el mismo motor que usa al leer un XML. Si tienes el archivo XML del comprobante, es mejor subirlo por el dashboard (Compras): trae la clave de acceso y el desglose exactos. Consulta los códigos de tarifa vigentes con consultar_reglas_sri.

Input parameters:

- `baseImponible` (number, required): Valor SIN impuestos
- `claveAcceso` (string): Los 49 dígitos, si los tienes: dan idempotencia
- `codigoPorcentaje` (string, required): Tabla 18 del SRI: '4'=15%, '0'=0%, '7'=exento. Consúltalo, no lo asumas.
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string): De contexto_emision. Obligatorio si la cuenta tiene varios emisores.
- `fechaEmision` (string, required): Fecha del comprobante (YYYY-MM-DD)
- `proveedorRazonSocial` (string)
- `proveedorRuc` (string, required): RUC de quien te facturó (13 dígitos)
- `sustentoTributario` (string)
- `tipoComprobante` (string, required): codDoc: '01' factura, '03' liquidación, '04' nota de crédito

### `clasificar_proveedor` (~463 tokens)

Decidir si un proveedor da derecho a crédito de IVA

Guarda de una vez si los comprobantes de un proveedor dan crédito de IVA, y lo aplica a los que ya tengas cargados. Se decide UNA vez por proveedor, no comprobante por comprobante. PROTOCOLO OBLIGATORIO, igual que al emitir: llama PRIMERO sin `confirmar` — eso NO escribe nada y devuelve el impacto (cuántos comprobantes, cuánto IVA y qué períodos se mueven). MUÉSTRASELO al usuario y espera su confirmación explícita; solo entonces vuelve a llamar con `confirmar: true` y el `confirmToken` que te devolvió. Estás moviendo una cifra que se declara ante el SRI. Si el usuario quiere una excepción para un comprobante suelto, usa `alcance: 'comprobante'` con su `compraId`: eso NO cambia la decisión guardada del proveedor.

Input parameters:

- `alcance` (string): Default 'proveedor'. 'comprobante' es la vía de excepción.
- `aplicarA` (string): Default 'pendientes': reclasifica también lo ya cargado
- `clasificacion` (string, required): con_derecho = el gasto se usa en tu actividad gravada; sin_derecho = no da crédito; proporcional = uso mixto (Contadeo NO calcula el factor 563)
- `compraId` (string): Obligatorio con alcance 'comprobante'
- `confirmToken` (string): El que devolvió la previsualización. No lo inventes.
- `confirmar` (boolean): false o ausente = solo previsualizar, NO escribe
- `creditoIva` (number): Solo para 'proporcional' por comprobante: el valor lo pone el contador
- `cuenta` (string): Opcional: tenantId de OTRA de tus cuentas para operar sobre ella (panel del contador). Requiere haber autorizado 'operar todas mis cuentas'. Los tenantId salen del bloque `multiempresa` de consultar_…
- `emisorId` (string)
- `nota` (string)
- `proveedorRuc` (string, required): RUC del proveedor (13 dígitos)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-contadeo-mcp/contadeo-mcp#diagnostics

## Score history

- 2026-09-25: 74
- 2026-09-24: 73
- 2026-09-23: 73
- 2026-09-22: 72
- 2026-09-21: 72
- 2026-09-20: 71
- 2026-09-19: 71
- 2026-09-18: 71
- 2026-09-17: 70
- 2026-09-16: 70
- 2026-09-15: 69
- 2026-09-14: 69
- 2026-09-13: 68
- 2026-09-12: 64
- 2026-09-11: 64
- 2026-09-10: 64
- 2026-09-09: 64
- 2026-09-08: 64
- 2026-09-07: 64
- 2026-09-06: 64
- 2026-09-05: 49

## Common questions

### What is the com.contadeo/mcp server?

com.contadeo/mcp is listed in the public MCP registry as com.contadeo/mcp. Contadeo: emite y consulta comprobantes electrónicos del SRI (Ecuador) desde asistentes de IA. This page covers its npm package (contadeo-mcp).

### Is the com.contadeo/mcp server safe to use?

com.contadeo/mcp scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the com.contadeo/mcp server expose?

com.contadeo/mcp exposes 39 tools: consultar_cuenta, contexto_emision, buscar_clientes, buscar_productos, preparar_factura, and 34 more. Their descriptions and schemas cost roughly 12,112 tokens of context every time the server is loaded.

### Is the com.contadeo/mcp server still maintained?

com.contadeo/mcp is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the com.contadeo/mcp server under?

com.contadeo/mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/contadeo-mcp
- Socket report: https://socket.dev/npm/package/contadeo-mcp
- Website: https://contadeo.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-contadeo-mcp/contadeo-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-contadeo-mcp/contadeo-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-contadeo-mcp/contadeo-mcp
