Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

🧾 Facturama MCP Server

Servidor MCP (Model Context Protocol) basado en FastMCP 3.x que expone la API de Facturama como herramientas para agentes LLM (Claude Desktop, Claude Code, Cursor, y cualquier cliente MCP). Cubre toda la operación de facturación electrónica CFDI 4.0 en México.

Python 3.11+ FastMCP 3.x CFDI 4.0 Status


Tabla de contenidos


¿Qué hace?

Permite que un agente de IA (o cualquier cliente MCP) pueda operar la facturación electrónica completa con lenguaje natural:

  • 🧾 Crear, consultar, cancelar y descargar CFDIs (Ingreso, Egreso, Pago)
  • 💸 Generar Complementos de Pago (REP 2.0) para facturas PPD
  • 👥 CRUD de clientes y productos del catálogo
  • 📚 Buscar en catálogos del SAT sin salir del agente
  • 📧 Enviar facturas por email al receptor
  • 💰 Manejar descuentos, retenciones, multiconcepto, monedas extranjeras

Ejemplo de prompt al agente:

"Hazme una factura para EMPRESA EJEMPLO, RFC ABC010101AAA, régimen 612, CP 78290. Un concepto: Software, $500 + IVA 16%. Mándamela por email a contabilidad@ejemplo.com"

El agente usa las herramientas del MCP para construir el CFDI correcto, timbrarlo y enviarlo.


Características

CFDI 4.0 — Ingreso, Egreso (notas de crédito), Traslado, Pago ✅ Complemento de Pagos REP 2.0 — para facturas PPD ✅ Multiconcepto — múltiples ítems en una sola factura ✅ Descuentos por concepto — con cálculo automático de bases imponibles ✅ Retenciones e IVA traslado — IVA, ISR, IEPS ✅ Cancelación con todos los motivos SAT — incluyendo motivo 01 con UUID sustitución ✅ CRUD completo — clientes y productos ✅ Búsqueda en catálogos SAT — productos, unidades, regímenes, usos CFDI, formas de pago, monedas, códigos postales ✅ Envío por email automático — con confirmación explícita ✅ Descargas PDF / XML / HTML — guardadas a disco ✅ Emisor tomado de la cuenta — el modelo no puede inventarse en nombre de quién se factura ✅ Guardarraíles de producción — dos cerrojos independientes antes de timbrar con valor fiscal


Herramientas disponibles (27 tools)

Módulo 0 — Emisión en una sola llamada (1 tool)

Tool Descripción
facturama_factura_emitir La forma habitual de facturar. Resuelve las claves del SAT de cada concepto, recupera al cliente si ya está dado de alta (o lo crea), toma emisor y lugar de expedición de la cuenta, calcula impuestos y timbra. Si el cliente ya existe, basta su RFC. Solo resuelve claves cuando la búsqueda es inequívoca: ante varias candidatas se detiene y las enumera.

Módulo 1 — CFDI (7 tools)

Control fino del comprobante, para lo que no cubre facturama_factura_emitir.

Tool Descripción
facturama_cfdi_crear Crea un CFDI 4.0 (Ingreso/Egreso/Traslado/Pago) con timbrado SAT. Soporta multiconcepto, descuentos, retenciones, multimoneda.
facturama_cfdi_crear_pago Genera Complemento de Pagos (REP 2.0) para liquidar facturas PPD.
facturama_cfdi_consultar Consulta los datos completos de un CFDI por su Id (busca tanto en activos como cancelados).
facturama_cfdi_listar Lista CFDIs con filtros: rfc_receptor, fechas, tipo, status, rango de folios.
facturama_cfdi_cancelar Cancela un CFDI ante el SAT. Soporta los 4 motivos (01-04) con UUID de sustitución.
facturama_cfdi_descargar Descarga PDF / XML / HTML del CFDI a disco local.
facturama_cfdi_enviar_email Envía el CFDI (PDF + XML adjuntos) por correo al receptor con confirmación explícita de envío.

Módulo 2 — Clientes (5 tools)

Tool Descripción
facturama_clientes_crear Crea un cliente en el catálogo.
facturama_clientes_listar Lista o busca clientes por RFC/nombre.
facturama_clientes_obtener Obtiene los datos completos de un cliente por su Id.
facturama_clientes_actualizar Actualiza un cliente. Solo necesitas pasar los campos a cambiar — el MCP hace GET → merge → PUT internamente.
facturama_clientes_eliminar Elimina un cliente del catálogo.

Módulo 3 — Productos (5 tools)

Tool Descripción
facturama_productos_crear Crea un producto/servicio. Auto-detecta el Unit (texto libre) desde el catálogo SAT a partir de la clave de unidad. Acepta SKU opcional.
facturama_productos_listar Lista o busca productos en catálogo.
facturama_productos_obtener Obtiene un producto por Id.
facturama_productos_actualizar Actualiza un producto (mismo patrón GET → merge → PUT que clientes).
facturama_productos_eliminar Elimina un producto.

Módulo 4 — Catálogos SAT (7 tools)

Tool Descripción
facturama_sat_buscar_producto Busca productos/servicios SAT por texto o clave. ⚠️ Sensible a acentos.
facturama_sat_buscar_unidad Busca claves de unidad (HUR, E48, KGM, etc.).
facturama_sat_codigo_postal Valida un código postal contra el catálogo SAT.
facturama_sat_regimenes_fiscales Lista los 20 regímenes fiscales SAT (601, 612, 626, etc.).
facturama_sat_usos_cfdi Lista los usos CFDI (G01, G03, P01, S01, etc.).
facturama_sat_formas_pago Lista formas de pago SAT (01-99).
facturama_sat_monedas Lista monedas ISO 4217 (MXN, USD, EUR, etc.).

Módulo 5 — Cuenta (2 tools)

Tool Descripción
facturama_cuenta_emisor En nombre de qué contribuyente se factura: RFC, razón social, régimen y lugares de expedición disponibles. El emisor lo determinan las credenciales del servidor, nunca los parámetros.
facturama_cuenta_sucursales Sucursales de la cuenta, cada una con su código postal de expedición.

Instalación

Estado: el paquete todavía no está publicado en PyPI. Hasta que lo esté, usa la instalación desde el repositorio que se describe más abajo; los comandos con uvx facturama-mcp funcionarán en cuanto se publique la v1.0.

Requisitos

  • Python 3.11+ — salvo con el bundle .mcpb o con Docker, que lo llevan dentro
  • Credenciales de Facturama, de sandbox o de producción

Las credenciales de sandbox son tuyas, no genéricas. No existe un usuario de demo público: cada cuenta tiene las suyas y se piden a Facturama. Si ves un 401 Credenciales inválidas, es esto.

Cuatro formas, según quién lo instale

Vía Para quién Cómo
Bundle .mcpb Claude Desktop, sin saber de programación Doble clic y rellenar un formulario
PyPI quien ya usa Python, agentes, n8n uvx facturama-mcp
Docker integración en infraestructura propia docker run facturama/mcp
Repositorio contribuidores git clone + uv sync

Bundle para Claude Desktop

Descarga facturama-facturacion.mcpb de la última versión publicada y arrástralo a Claude Desktop. Te pedirá usuario, contraseña y entorno en un formulario. No hace falta Python ni tocar ningún archivo de configuración.

Para construirlo tú mismo: ./mcpb/construir.sh

Desde PyPI

uvx facturama-mcp          # ejecuta sin instalar nada permanente
# o
pip install facturama-mcp  # instalación normal

Con Docker

docker run --rm -p 8000:8000 \
  -e FACTURAMA_USER=tu_usuario \
  -e FACTURAMA_PASSWORD=tu_contraseña \
  facturama/mcp

Arranca en HTTP (http://localhost:8000/mcp), que es lo que necesitan n8n, Make y Zapier. Las credenciales van por variables de entorno y nunca dentro de la imagen.

Desde el repositorio

git clone https://github.com/facturamamx/mcp-facturacion.git
cd mcp-facturacion
uv sync
cp .env.example .env      # y edítalo con tus credenciales
uv run facturama-mcp

Configuración

Cuatro variables de entorno, y solo las dos primeras son obligatorias:

Variable Obligatoria Por defecto Qué hace
FACTURAMA_USER Usuario de tu API de Facturama
FACTURAMA_PASSWORD Contraseña de tu API de Facturama
FACTURAMA_ENV no sandbox sandbox (sin valor fiscal) o production
FACTURAMA_ALLOW_PRODUCTION no false Cerrojo independiente: mientras valga false, nada se timbra ante el SAT

Por qué hay dos cerrojos para producción. FACTURAMA_ENV=production no basta por sí solo: hace falta además FACTURAMA_ALLOW_PRODUCTION=true, que solo puede poner una persona en el entorno del servidor, y una confirmación explícita en cada llamada que timbre. Timbrar es irreversible y consume folios, así que llegar ahí por descuido no debería ser posible.

Otras variables opcionales: FACTURAMA_TIMEOUT (30 s), FACTURAMA_MAX_RETRIES (3), FACTURAMA_DOWNLOAD_DIR (./downloads) y FACTURAMA_MCP_TRANSPORT (stdio o http).


Uso

Claude Desktop

Lo más sencillo es el bundle .mcpb de arriba. Si prefieres configurarlo a mano, edita ~/Library/Application Support/Claude/claude_desktop_config.json en macOS o %APPDATA%\Claude\claude_desktop_config.json en Windows:

{
  "mcpServers": {
    "facturama": {
      "command": "uvx",
      "args": ["facturama-mcp"],
      "env": {
        "FACTURAMA_USER": "tu_usuario",
        "FACTURAMA_PASSWORD": "tu_contraseña",
        "FACTURAMA_ENV": "sandbox"
      }
    }
  }
}

💡 Si Claude Desktop no encuentra uvx, pon su ruta absoluta (which uvx): la aplicación no hereda el PATH de tu terminal.

Claude Code

claude mcp add facturama \
  --env FACTURAMA_USER=tu_usuario \
  --env FACTURAMA_PASSWORD=tu_contraseña \
  --env FACTURAMA_ENV=sandbox \
  -- uvx facturama-mcp

Cursor

En ~/.cursor/mcp.json, o en .cursor/mcp.json dentro del proyecto:

{
  "mcpServers": {
    "facturama": {
      "command": "uvx",
      "args": ["facturama-mcp"],
      "env": {
        "FACTURAMA_USER": "tu_usuario",
        "FACTURAMA_PASSWORD": "tu_contraseña",
        "FACTURAMA_ENV": "sandbox"
      }
    }
  }
}

VS Code

En .vscode/mcp.json. VS Code sabe pedir los secretos al arrancar, así que no hace falta escribirlos en el archivo:

{
  "inputs": [
    {
      "id": "facturama-password",
      "type": "promptString",
      "description": "Contraseña de la API de Facturama",
      "password": true
    }
  ],
  "servers": {
    "facturama": {
      "command": "uvx",
      "args": ["facturama-mcp"],
      "env": {
        "FACTURAMA_USER": "tu_usuario",
        "FACTURAMA_PASSWORD": "${input:facturama-password}",
        "FACTURAMA_ENV": "sandbox"
      }
    }
  }
}

n8n, Make y Zapier

Estos no ejecutan procesos locales: necesitan una URL. Levanta el servidor en HTTP y apúntalos a ella.

docker run -d -p 8000:8000 \
  -e FACTURAMA_USER=tu_usuario \
  -e FACTURAMA_PASSWORD=tu_contraseña \
  --name facturama-mcp facturama/mcp

En n8n, añade un nodo MCP Client con la URL http://localhost:8000/mcp y transporte HTTP Streamable.

⚠️ Ese contenedor expone tus credenciales de facturación a quien alcance el puerto. Publícalo solo dentro de tu red, detrás de un proxy con autenticación, y nunca directamente a internet. El servidor remoto con OAuth llega en la v1.5.


Ejemplos de uso

1. Factura simple (1 concepto, IVA 16%)

"Factura 2 servicios de facturación a 1.000 € cada uno al RFC EKU9003173C9, folio FLUJO-1."

→ Una sola llamada a facturama_factura_emitir. Si el cliente ya está dado de alta, no hace falta nada más: su razón social, régimen y CP salen de su ficha, el emisor y el lugar de expedición de la cuenta, y la clave del SAT de la descripción. Devuelve el UUID timbrado junto con las claves que resolvió, para poder revisarlas.

Con control total del comprobante —o para un CFDI que no sea de ingreso— se usa facturama_cfdi_crear, pasando cada clave del SAT explícitamente.

2. Factura con múltiples conceptos y descuento

"Crea factura para [datos receptor]. 3 conceptos: (1) Hosting $500, (2) Dominio $200 con descuento de $50, (3) Certificado SSL $100. Todos con IVA 16%."

→ Usa el campo Discount por concepto. La base imponible se calcula como subtotal − descuento antes del IVA.

3. Factura de honorarios con retención

"Genera factura para [datos]. 1 concepto: Consultoría legal $10,000. Aplica IVA 16% traslado y retención de ISR 10%."

→ Resultado: subtotal $10,000 + IVA $1,600 − ISR $1,000 = $10,600.

4. Cancelar y sustituir un CFDI

"Cancela el CFDI con id swkZKaX... motivo 01 y sustitúyelo por el UUID 4e805b06-..."

→ Llama facturama_cfdi_cancelar con motivo="01" y uuid_sustitucion.

5. Complemento de pago (PPD)

"Crea complemento de pago para liquidar la factura UUID bb993a7f-... folio 21 por $5,800 mediante transferencia bancaria el 2026-05-06."

→ Llama facturama_cfdi_crear_pago con el array de pagos y documentos relacionados.

6. Buscar clave SAT

"¿Cuál es la clave SAT para servicios de marketing digital?"

→ El agente prueba buscar_producto_sat("publicidad") y sugiere 82101603 - Publicidad en internet.

7. Crear cliente desde constancia fiscal

"Aquí está la constancia fiscal de mi cliente [adjunto PDF]. Crea el cliente en el catálogo y emite una factura por $1,000."

→ El agente extrae los datos del PDF (RFC, nombre, régimen, CP) y llama facturama_clientes_crear + facturama_cfdi_crear.


Particularidades de la API de Facturama

⚠️ Estos son hallazgos validados en producción que no están claramente documentados. Anótalos para tu equipo.

1. Validación nombre↔RFC (CFDI 4.0)

Desde CFDI 4.0, el SAT valida que el receptor_nombre coincida exactamente con el nombre registrado para ese RFC en su cédula fiscal.

  • ❌ RFC inventado + nombre ficticio → 400 Bad Request
  • ✅ RFC real con nombre tal cual SAT → OK
  • ✅ RFCs genéricos del SAT siempre funcionan:
    • XAXX010101000 — Público en general
    • XEXX010101000 — Receptor extranjero

2. Endpoints CFDI ≠ /api-lite/Cfdi

Documentación parcial sugiere /api-lite/Cfdi/.... Esos endpoints no existen en producción. Los reales son:

Operación Endpoint correcto
Listar GET /cfdi (con query params)
Cancelar DELETE /cfdi/{id}
Descargar PDF GET /cfdi/pdf/issued/{id}
Descargar XML GET /cfdi/xml/issued/{id}
Enviar email POST /Cfdi?cfdiType=issued&cfdiId=X&email=Y
Crear POST /3/cfdis

POST /3/cfdis toma el emisor y el CSD de la cuenta autenticada. La variante /api-lite/3/cfdis es para revendedores que timbran en nombre de varios contribuyentes y exige un nodo Issuer en el payload; queda fuera del alcance de la v1.0, que factura siempre en nombre del titular de las credenciales.

3. PUT estricto en clientes y productos

La API rechaza payloads parciales en PUT /Client/{id} y PUT /Product/{id}:

  • Exige todos los campos requeridos del modelo
  • Rechaza strings vacíos en campos opcionales (CuentaPredial: "" falla)

Este MCP implementa automáticamente GET → merge → clean → PUT, así que solo pasas los campos a cambiar (facturama_clientes_actualizar, facturama_productos_actualizar).

4. CFDI tipo P (Pago) tiene un payload muy distinto

  • ❌ NO debe llevar Items ni PaymentForm a nivel raíz
  • CfdiUse debe ser CP01 obligatoriamente
  • ✅ Toda la info real va en Complemento.Payments
  • La herramienta facturama_cfdi_crear_pago aplica esto automáticamente.

5. Endpoints DELETE para clientes

  • DELETE /Client/{id} → 404
  • DELETE /api-lite/client/{id} → 200

(El MCP usa el correcto.)

6. Comportamiento del sandbox vs producción

Operación Sandbox Producción
Crear/Cancelar CFDI ✅ Real (timbra) ✅ Real
Enviar email ✅ Llega ✅ Llega
Eliminar cliente ⚠️ Responde 200 pero NO elimina ✅ Elimina
Eliminar producto ✅ Elimina ✅ Elimina

El sandbox NO tiene validez fiscal pero SÍ envía correos reales. Cuidado con los destinatarios.

7. Búsqueda sensible a acentos

El catálogo SAT del endpoint /catalogs/ProductsOrServices distingue acentos:

buscar_producto_sat("consultoria")    → []           ❌
buscar_producto_sat("consultoría")    → 4 resultados ✅
buscar_producto_sat("80101500")       → 1 resultado  ✅ (clave directa)

8. Límite de envíos por email

Facturama bloquea el reenvío múltiple de la misma factura al mismo email (anti-spam). Si necesitas reenviar, crea un CFDI nuevo o cambia de destinatario.

Mensaje de error explícito: {"success": false, "msj": "Has alcanzado el límite de envíos para esta factura."}

9. Header Content-Type: application/json (sin charset)

Algunos endpoints rechazan Content-Type: application/json; charset=utf-8 (lo que httpx envía por default). El MCP envía solo application/json.


Estructura del proyecto

mcp-facturacion/
├── src/facturama_mcp/
│   ├── server.py          # Las 27 herramientas MCP
│   ├── client.py          # Cliente HTTP: reintentos, timeouts, credenciales
│   ├── config.py          # Configuración diferida desde el entorno
│   ├── account.py         # Emisor y lugares de expedición, desde la cuenta
│   ├── resolucion.py      # Resolución de claves del SAT y de clientes
│   ├── respuestas.py      # Paginación, truncado y formato de las respuestas
│   ├── catalogs.py        # Catálogos del SAT con caché por proceso
│   ├── validators.py      # Validación estructural antes de llamar a la API
│   ├── errors.py          # Traducción de errores de la API
│   └── cli.py             # Punto de entrada `facturama-mcp`
├── tests/
│   ├── fixtures/          # Respuestas capturadas del sandbox real
│   ├── sandbox_falso.py   # Sirve esas capturas sin red
│   └── capturar_fixtures.py
├── mcpb/                  # Bundle para Claude Desktop
├── server.json            # Metadatos para el MCP Registry
├── Dockerfile
└── ROADMAP-v1.md          # Plan, decisiones cerradas y su porqué

Por dónde empezar a leer

  • server.py — cada herramienta es una función async con @mcp.tool().
  • ROADMAP-v1.md §6 — las decisiones de diseño y, sobre todo, por qué se tomaron. Ahorra re-litigar cosas ya discutidas.
  • tests/sandbox_falso.py — reproduce las rarezas reales de la API. Si algo te sorprende del código, probablemente esté explicado ahí.

Desarrollo

uv sync                    # instalar
uv run facturama-mcp       # arrancar en stdio

# En HTTP, para n8n o pruebas remotas
FACTURAMA_MCP_TRANSPORT=http uv run facturama-mcp

Pruebas

uv run pytest -m "not sandbox"   # 310 pruebas, sin red ni credenciales
uv run pytest -m sandbox         # contrato contra la API real (necesita .env)
uv run ruff check src/ tests/
uv run mypy src/facturama_mcp/

Las pruebas offline corren contra capturas reales del sandbox, no contra mocks escritos a mano. Si la API cambia, se recapturan:

uv run python tests/capturar_fixtures.py

El motivo está en ROADMAP-v1.md §6.12, y se resume en que los fallos que ha tenido este servidor respondían todos 200: un mock inventado los habría dado por buenos.

Inspeccionar las herramientas

npx @modelcontextprotocol/inspector uv run facturama-mcp

Despliegue

Para uso personal o de escritorio no hace falta desplegar nada: el bundle .mcpb o uvx facturama-mcp corren en el equipo de cada persona con sus propias claves. Esto es para compartir el servidor con un equipo o conectarlo a n8n, Make o Zapier.

Docker

docker run -d --name facturama-mcp -p 8000:8000 \
  -e FACTURAMA_USER=tu_usuario \
  -e FACTURAMA_PASSWORD=tu_password \
  -e FACTURAMA_ENV=production \
  -e FACTURAMA_ALLOW_PRODUCTION=true \
  --restart unless-stopped \
  facturama/mcp

Antes de poner FACTURAMA_ALLOW_PRODUCTION=true, lee esto. Ese contenedor puede timbrar comprobantes con valor fiscal ante el SAT, y quien alcance el puerto puede hacerlo. Hoy el servidor no autentica a quien se conecta: da por hecho que corre en el equipo de su dueño. Si lo expones en red:

  • Detrás de un proxy con TLS y autenticación, nunca directo a internet.
  • Solo en la red interna, sin publicar el puerto al exterior.
  • En sandbox mientras estés probando la integración.

El servidor remoto pensado para varios usuarios, con OAuth 2.1 y aislamiento por cuenta, llega en la v1.5. Hasta entonces, esto es un despliegue de un solo inquilino disfrazado de servicio.

Comprobar que está sano

curl -s http://localhost:8000/mcp -H 'Accept: text/event-stream' | head -1
docker logs facturama-mcp

La imagen trae un HEALTHCHECK que comprueba que el servidor puede listar sus herramientas, no solo que el puerto conteste.


Troubleshooting

"401 Unauthorized" al iniciar el servidor

  • Verifica que .env tenga las credenciales correctas
  • Si el password tiene caracteres especiales (&, @, $), está bien tal cual — NO escapes
  • Verifica que FACTURAMA_ENV esté en sandbox o production correctamente

"El campo Nombre del receptor, debe pertenecer al nombre asociado al RFC"

  • El RFC inventado no pasa validación SAT (CFDI 4.0)
  • Usa un RFC real con su nombre correcto, o un RFC genérico (XAXX010101000)

"Has alcanzado el límite de envíos para esta factura"

  • Facturama bloquea reenvíos al mismo email
  • Crea una nueva factura o usa otro destinatario

La tool no aparece en Claude Code/Desktop/Cursor

  • Verifica que el config apunte a uv con ruta absoluta (which uv)
  • Reinicia el cliente tras editar el config
  • En Claude Code: /mcp te muestra los servidores conectados
  • Revisa que el .env esté presente en el directorio del servidor

Búsqueda en SAT devuelve vacío

  • ¿Tiene acentos? consultoria ❌ vs consultoría
  • Si conoces la clave SAT, búscala directa: buscar_producto_sat("80101500")

CSD o "no encontrado el certificado del emisor"

  • El usuario sandbox lovableapi SÍ tiene CSD para EKU9003173C9
  • Si usas otro RFC emisor, asegúrate de tener su CSD configurado en Facturama
  • El MCP hace fallback automático a la API regular si la Lite falla por CSD

127 command not found: uv

  • Falta instalar uv o no está en el PATH
  • Usa la ruta absoluta en el config: which uv te la dice

Roadmap

v0.3 — En curso

  • Tests automatizados — pytest + coverage > 80%
  • Dockerfile + docker-compose
  • Auth en HTTP remoto — token Bearer compartido
  • Resources MCP — plantillas de CFDIs comunes
  • Logging estructurado — JSON logs

v0.4 — Planeado

  • Nómina — CFDIs con complemento 1.2
  • Carta Porte 3.1 — Para transportistas
  • Multiemisor — Soporte para múltiples RFCs emisores en una sesión
  • Comercio Exterior — Complemento para exportaciones
  • Reportes fiscales — Resúmenes por período

v0.5 — Futuro

  • Webhooks — Notificaciones de cancelación/aceptación
  • Validador XML — Verificación previa antes de timbrar
  • Plantillas reutilizables — Para clientes y productos frecuentes

Completado ✅

  • CFDI 4.0 (Ingreso, Egreso, Pago)
  • CRUD Clientes y Productos
  • Catálogos del SAT
  • Cancelaciones (todos los motivos 01-04)
  • Multi-concepto, descuentos, retenciones
  • Envío por email con confirmación
  • Descargas PDF/XML/HTML
  • Complemento de Pagos REP 2.0
  • Validación end-to-end con 24 herramientas

Stack técnico

Componente Versión Propósito
FastMCP 3.1+ Framework MCP (stdio + HTTP)
httpx latest Cliente HTTP async
Pydantic 2.x Modelos de datos y validación
Python 3.11+ Runtime
uv latest Gestor de paquetes y entornos
Decimal stdlib Precisión fiscal en cálculos monetarios
Facturama API REST v3 / API Lite Backend de facturación

Decisiones de diseño

  • Async I/O end-to-end con httpx.AsyncClient para no bloquear en operaciones de red.
  • Decimal con ROUND_HALF_UP para todos los cálculos monetarios (compatible con regla SAT).
  • Pydantic models para Item y Tax con tipado fuerte que se traduce a JSON Schema MCP automáticamente.
  • Fallback automático a API regular cuando API Lite falla por falta de CSD.
  • GET → merge → clean → PUT en updates para evitar payloads parciales rechazados por la API.

Contribuir

Pull Requests / Merge Requests bienvenidos.

Flujo recomendado

  1. Fork del repo
  2. Crea una branch: feature/mi-tool o fix/bug-x
  3. Implementa + prueba localmente con MCP Inspector o Python directo
  4. Push + abre PR/MR a main
  5. Espera revisión de un Maintainer

Convenciones de commits

feat: nueva funcionalidad
fix: corrección de bug
docs: cambios en documentación
chore: mantenimiento (deps, configs)
test: agregar/modificar tests
refactor: cambios sin alterar comportamiento

Reportar bugs

Abre un issue con:

  • Versión del MCP (git rev-parse HEAD)
  • Comando ejecutado o prompt al agente
  • Output esperado vs output real
  • Logs (con HTTPX_LOG_LEVEL=DEBUG si es problema HTTP)

Licencia

(Por definir — sugerencia: MIT o Apache 2.0)


Créditos

Desarrollo y validación: Antonio Tembleque (@facturamamx) — Facturama Engineering.

Hallazgos de bugs en la API documentados durante validación end-to-end con todas las 24 herramientas en sandbox.


Soporte

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

facturama_mcp-1.0.0rc2.tar.gz (259.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

facturama_mcp-1.0.0rc2-py3-none-any.whl (58.6 kB view details)

Uploaded Python 3

File details

Details for the file facturama_mcp-1.0.0rc2.tar.gz.

File metadata

  • Download URL: facturama_mcp-1.0.0rc2.tar.gz
  • Upload date:
  • Size: 259.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for facturama_mcp-1.0.0rc2.tar.gz
Algorithm Hash digest
SHA256 b51dd2a5261d9eb621ddc0f6f4cbd257df45f47519969a83e1c8be84b69ed91b
MD5 b2a2ff896407017369493a77fce7947b
BLAKE2b-256 cfd2c0d592f26534f916081b8fe48de4e5acafe2afe8d58f6869007454ad7005

See more details on using hashes here.

Provenance

The following attestation bundles were made for facturama_mcp-1.0.0rc2.tar.gz:

Publisher: release.yml on facturamamx/mcp-facturacion

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file facturama_mcp-1.0.0rc2-py3-none-any.whl.

File metadata

File hashes

Hashes for facturama_mcp-1.0.0rc2-py3-none-any.whl
Algorithm Hash digest
SHA256 14e58921234a0132056f4e9011be9aa6ef6eed6779de6b7b807cc04268140423
MD5 3d3224ccfe81a2727874e0265a300af4
BLAKE2b-256 8131da28d674daa0c0cb4c8ec9f765ce6db9fafe963e265a35afa9751d3ab919

See more details on using hashes here.

Provenance

The following attestation bundles were made for facturama_mcp-1.0.0rc2-py3-none-any.whl:

Publisher: release.yml on facturamamx/mcp-facturacion

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.0.0rc2 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page