Statement of Account MCP

Estados de cuenta periódicos por cliente: saldo inicial, facturas, pagos, saldo final, salida lista para PDF.

Documentación

mcp-statement-of-account

Servidor MCP para estados de cuenta de clientes, cuentas por cobrar y antigüedad de facturas. El documento único que responde cuánto te debe realmente un cliente, con antigüedad a cualquier fecha, y con el recordatorio de pago redactado.

Funciona con Claude Desktop, Claude Code, Cursor y cualquier cliente del Protocolo de Model Context. Se ejecuta en tu propia máquina, o alojado sin instalación.

Página del producto: https://mcp.zovo.one/s/statement-of-account — qué hace, las herramientas que expone y un endpoint de token en vivo.

Instalación

Alojado, nada que instalar. Obtén un token de https://mcp.zovo.one/mcp/connect (la página de conexión) o de https://mcp.zovo.one/mcp/token (el mismo token como JSON); se emite un token anónimo gratuito al instante y una clave Pro funciona de la misma manera. Luego apunta un cliente MCP a https://mcp.zovo.one/mcp/statement-of-account mediante streamable-http y envía el token como Authorization: Bearer <token>.

Si tu cliente no puede configurar encabezados, coloca el token en la ruta en su lugar: https://mcp.zovo.one/mcp/statement-of-account/t/<token>. Ambas formas funcionan. La URL sin token responde 401 en tools/call, por lo que el token no es opcional.

Claude Desktop, un clic. Descarga statement-of-account.mcpb desde la última versión y haz doble clic en él.

Desde el código fuente. El espejo es autónomo: cada dependencia de @theluckystrike/* está incluida, por lo que un clon nuevo se compila sin configuración adicional.

git clone https://github.com/theluckystrike/mcp-statement-of-account.git
cd mcp-statement-of-account
npm install && npm run build

Luego apunta tu cliente al punto de entrada compilado:

{
  "mcpServers": {
    "statement-of-account": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-statement-of-account/dist/index.js"]
    }
  }
}

@theluckystrike/mcp-statement-of-account aún no está publicado en npm, por lo que un comando npx -y @theluckystrike/mcp-statement-of-account fallará. Las tres rutas anteriores son las que funcionan y cada una es probada por CI.

statement-of-account demo

Espejo de solo lectura de mcp-servers/servers/statement-of-account. Consulta MIRROR.md.

theluckystrike/mcp-statement-of-account MCP server

En el Registro oficial de MCP (io.github.theluckystrike/statement-of-account). Envía a un cliente el documento único que responde "¿cuánto te debo realmente?". Este servidor MCP lee los libros que ya llevas en este conjunto, tus facturas, tus notas de crédito y tus depósitos, y los convierte en un estado de cuenta para un período: el saldo que tenías al inicio, cada factura emitida, cada pago recibido, cada nota de crédito otorgada y el saldo al final. Clasifica lo que sigue abierto en 0-30, 31-60, 61-90 y más de 90 días de vencido, para que veas de un vistazo qué cliente es el problema; escribe el estado como texto pegable o como PDF A4 que se ve como tus facturas; y redacta el recordatorio de pago, en nivel amistoso, firme o final. Nunca escribe nada de vuelta en tus facturas y nunca inventa un cargo por mora.

Creado por theluckystrike.

La publicación en npm de @theluckystrike/mcp-statement-of-account está pendiente, por lo que npx -y @theluckystrike/mcp-statement-of-account devuelve 404 hoy. Hasta entonces, el paquete de un clic .mcpb o un clon+compilación es la ruta que funciona.

Instalación

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "statement-of-account": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-statement-of-account"]
    }
  }
}

Claude Code

claude mcp add statement-of-account -- npx -y @theluckystrike/mcp-statement-of-account

Cursor

~/.cursor/mcp.json (global) o .cursor/mcp.json (proyecto), misma entrada que Claude Desktop.

Herramientas

herramientaqué hace
statement_buildEstado de cuenta de un cliente para un período: saldo inicial, facturas emitidas, pagos recibidos, notas de crédito, depósitos aplicados, saldo final. Cada cifra en unidades menores y formateada
statement_agingLo que se debe, dividido en 0-30, 31-60, 61-90 y más de 90 días después de la fecha de vencimiento a una fecha elegida, para un cliente o para todos, por moneda
statement_textEl mismo estado como texto plano, movimientos en orden de fecha, listo para pegar en un correo
statement_pdfEl mismo estado como PDF A4 titulado ESTADO DE CUENTA, con el mismo diseño de página que tus facturas y notas de crédito
dunning_textUn recordatorio de pago en nivel 1 (amistoso), 2 (firme) o 3 (demanda final), con la lista de vencidos y tus datos bancarios
statements_reportTodos los clientes a la vez: lo pendiente por moneda, con antigüedad, y la factura vencida más antigua del libro
license_statusGratis o Pro, y dónde actualizar
license_activateActivar una clave Pro

Además, el recurso statement://sources, que indica cuál de los tres almacenes podría leer este servidor y cuántas filas tiene cada uno, y el prompt chase_overdue.

Gratis vs Pro

GratisPro
Estados generados5 por mes calendarioilimitados
Reconstruir un estado ya generadoilimitadoilimitado
statement_agingilimitadoilimitado
statement_textsísí
dunning_text niveles 1 y 2sísí
dunning_text nivel 3, demanda finalnosí
statement_pdfnosí
statements_reportnosí
Crédito en el pie de página del PDFmostradoeliminado

La antigüedad es gratuita e ilimitada a propósito. "Quién me debe dinero" es la pregunta para la que existe todo este servidor, y un nivel gratuito que la oculte sería una demostración, no una herramienta. El medidor está en el estado, el documento que realmente va a un cliente, y cuenta estados distintos: el mismo cliente, período y moneda reconstruidos es gratis para siempre.

Obtén Pro, de pago único, de por vida, para este servidor. Las claves se verifican sin conexión.

De dónde salen los números

Nada aquí se escribe dos veces. El servidor lee tres almacenes y no escribe en ninguno de ellos:

almacénservidorqué se toma de él
invoices.jsonmcp-invoicelas facturas, sus fechas de vencimiento y cuánto de cada una está pagado
credit-notes.jsonmcp-billing-docslas notas de crédito, ya almacenadas con signo negativo
deposits.jsonmcp-depositslas aplicaciones de depósitos y lo que aún se mantiene

Un almacén que nunca has instalado simplemente está ausente, y el estado se genera sin él. Un almacén que está en disco y no se puede LEER es algo completamente distinto y se informa como tal en cada cifra, porque un saldo que no se pudo calcular nunca debe mostrarse como un saldo de nada adeudado. El único almacén sin el que el servidor se niega a trabajar es el libro de facturas.

Una observación medida

Calcular la antigüedad de una fecha pasada con las cifras de pago de hoy no es ligeramente incorrecto, es silenciosamente vacío. La antigüedad suele escribirse como "toma cada factura, resta lo que se ha pagado y clasifica por fecha de vencimiento". La resta es la parte que nadie fecha. En el mes trabajado en test/_client.mjs, con antigüedad al 2026-06-10, las dos reglas dan:

reglapendientevencido
al 2026-06-102.500,00 EUR500,00 EUR, 31 días de retraso
paid_minor de hoy1.700,00 EUR0,00 EUR

La regla ingenua subestima lo adeudado en 800,00 de 2.500,00, un tercio del saldo, y reporta NADA vencido en una fecha en que una factura tenía un mes de retraso, porque un pago que llegó dos días después ya se ha restado de ella. El fallo es invisible: la respuesta se ve ordenada, los grupos suman y no se puede reproducir el próximo mes porque la entrada sigue moviéndose. Por lo tanto, cada cifra en statement_aging se toma a la fecha solicitada, en ambas direcciones: una factura emitida después no está en los libros, un pago realizado después no ha ocurrido y una nota de crédito emitida después no se ha otorgado.

La segunda cosa que mostró la medición: paid_minor y payments[] en una factura no tienen que coincidir y, de hecho, no suelen hacerlo. invoice_mark_paid escribe ambos, pero deposit_apply genera paid_minor y no agrega ninguna fila de pago, y una factura creada antes de que existiera ese campo tampoco tiene filas. Reconstruir los recibos desde payments[] habría perdido 300,00 de los 900,00 de recibos del mes trabajado, un tercio del efectivo, sin error en ningún lugar. paid_minor se trata como la autoridad y las filas son solo la atribución.

Reglas que este servidor mantiene

  • Un depósito es dinero que se mueve una vez. Aplicar un depósito ya escribe el pago en la factura, por lo que el estado lo cuenta allí y lo desglosa como "de los cuales depósitos aplicados" en lugar de acreditarlo una segunda vez. El dinero de depósito aún retenido es una línea de nota y nunca forma parte del saldo: es dinero del cliente hasta que se aplica.
  • Las monedas nunca se suman entre sí. Un estado es una moneda, y a un cliente facturado en dos se le pregunta cuál. No hay tipo de cambio en este servidor, por lo que una sola cifra entre un libro en EUR y uno en USD sería una inventada.
  • Vencido hoy no es moroso. Una factura entra en el grupo de 0-30 el primer día después de su fecha de vencimiento. Lo pendiente pero aún no vencido se informa junto a los grupos, nunca dentro de ellos y nunca oculto.
  • Una nota de crédito reduce la factura que nombra y ninguna otra. Un saldo abierto se limita a cero y cualquier exceso se informa como crédito no aplicado, en lugar de cancelar silenciosamente una factura contra la que el cliente nunca aceptó.
  • Ningún recordatorio inventa un cargo. Los tres niveles de cobro difieren en tono y plazo, y en nada más. Ningún nivel indica una tarifa por mora, una tasa de interés o un costo legal, porque este servidor no tiene términos de contrato, tasa legal ni jurisdicción, y el único lugar donde nunca se debe poner un número inventado es en una demanda de dinero.
  • Se rechaza un recordatorio para un cliente sin nada vencido, y el rechazo indica qué está pendiente pero aún no vencido.

Privacidad

Todos los datos permanecen en tu máquina. Las facturas, notas de crédito y depósitos se leen de ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/, el registro propio de este servidor de estados generados se escribe en .../mcp-servers/statement-of-account/, y no se envía nada a ningún lugar. No hay ninguna llamada de red en este servidor. Las claves de licencia se verifican sin conexión.

Licencia

MIT. Soporte: support@zovo.one

Creado por theluckystrike.

Usa estos documentos como servidor MCP

Cualquier cliente MCP (Claude, Cursor, Windsurf, VS Code) puede leer la documentación de este repositorio directamente mediante GitMCP, sin instalación: