ASPEL SAE MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ASPEL SAE MCP Server query current stock levels for product CVE_ART 1001 across all warehouses"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Servidor MCP para ASPEL SAE 8 y 10 (Firebird 2.5) con Multialmacén
Servidor Model Context Protocol (MCP) especializado para conectar agentes de Inteligencia Artificial (Antigravity, Claude, ChatGPT, Cursor, Windsurf, etc.) con bases de datos Firebird 2.5 de ASPEL SAE 8.0 y 10.0, con soporte completo para la configuración de Multialmacén.
🎯 Capacidades Principales
Conectividad Nativa Firebird 2.5: Implementado con driver 100% puro (
firebirdsql), eliminando la necesidad de lidiar confbclient.dllo incompatibilidades de arquitectura 32/64 bits.Soporte de Caracteres en Español: Configuración de juego de caracteres
WIN1252/ISO8859_1para evitar problemas con acentos y la letra "ñ".Gestión Especializada de Multialmacén:
Consulta de existencias por almacén en la tabla núcleo
MULT[EE].Catálogo de almacenes en
ALMACENES[EE].Kardex de movimientos por almacén en
MINVE[EE].Rastreabilidad de partidas en ventas y pedidos con su respectivo almacén asignado (
NUM_ALMenPAR_FACT*[EE]).
Máxima Seguridad de Solo Lectura (Read-Only Guardrails):
Transacciones con aislamiento
READ COMMITTEDyROLLBACKforzado para jamás retener bloqueos en tablas de un ERP en producción.Validador sintáctico AST (
sqlglot) que bloquea tajantemente operaciones de modificación (INSERT,UPDATE,DELETE,DROP,ALTER,EXECUTE, etc.).Inyección y acotamiento automático de la cláusula de paginación de Firebird 2.5 (
SELECT FIRST n).
Multi-Empresa Dinámica: Parámetro de empresa adaptable (
01a99), por defecto configurado en variables de entorno.
Related MCP server: Microsoft SQL Server MCP Server
🗄️ Esquema de Datos ASPEL SAE (Multialmacén)
En ASPEL SAE, todas las tablas terminan con un sufijo de dos dígitos correspondiente al número de empresa (ej. 01).
┌──────────────────┐
│ ALMACENES01 │
│ (CVE_ALM, DESCR) │
└────────┬─────────┘
│ 1:N
┌──────────────────┐ 1:N ┌────────▼─────────┐
│ INVE01 ├─────────►│ MULT01 │
│ (CVE_ART, DESCR, │ │(CVE_ART, CVE_ALM,│
│ CON_CTRL_ALM) │ │ EXIST, STOCK_MIN)│
└────────┬─────────┘ └──────────────────┘
│ 1:N
┌────────▼─────────┐
│ MINVE01 │ (Kardex: Historial de movimientos con ALMACEN)
└──────────────────┘
▲
│ Afectado por
┌────────┴─────────┐ ┌──────────────────┐
│ PAR_FACTF01 ├─────────►│ FACTF01 │
│(CVE_ART, NUM_ALM,│ N:1 │ (CVE_DOC, FECHA, │
│ CANT, PREC) │ │ CVE_CLPV, TOT) │
└──────────────────┘ └──────────────────┘Tablas Involucradas
Tabla Base | Descripción de Negocio | Campos Clave |
| Catálogo de almacenes físicos/lógicos. |
|
| Catálogo maestro de artículos y servicios. |
|
| Existencias por almacén. |
|
| Kardex de movimientos de inventario. |
|
| Facturas de venta y sus partidas. |
|
| Pedidos de clientes y sus partidas. |
|
| Catálogo de clientes y saldos. |
|
Diferencias Clave: SAE 8.0 vs SAE 10.0
SAE 10: Incorpora campos específicos de CFDI 4.0 (
OBJ_IMPen partidas de documentos), extensiones de longitud en campos de texto y mayor integración con regímenes fiscales enCLIE.SAE 8: Esquema tradicional con desglose en 4 tasas de impuestos y longitud estándar de 40 caracteres en descripciones de inventario iniciales.
🛠️ Instalación y Puesta en Marcha
1. Requisitos Previos
Python 3.10+ (recomendado Python 3.11 - 3.13 en Windows).
Servicio de Firebird 2.5 en ejecución (puerto 3050).
Archivo de base de datos
.FDBde Aspel SAE accesible en red local o localmente.
2. Clonar / Descargar e Instalar Dependencias
# Crear y activar entorno virtual
python -m venv .venv
.\.venv\Scripts\Activate.ps1
# Opción A: Instalar dependencias desde requirements.txt
pip install -r requirements.txt
# Opción B: Instalar el paquete en modo editable con su CLI
pip install -e .3. Configuración del Archivo .env
Copia .env.example como .env y ajusta las rutas y credenciales según tu entorno:
SAE_HOST=localhost
SAE_PORT=3050
# Ruta típica para SAE 8:
# SAE_DATABASE_PATH=C:/Program Files (x86)/Common Files/Aspel/Sistemas Aspel/SAE 8.00/Datos/Empresa01/SAE80EMPRE01.FDB
# Ruta típica para SAE 10:
SAE_DATABASE_PATH=C:/Program Files (x86)/Common Files/Aspel/Sistemas Aspel/SAE 10.00/Datos/Empresa01/SAE100EMPRE01.FDB
SAE_USER=SYSDBA
SAE_PASSWORD=masterkey
SAE_CHARSET=WIN1252
SAE_DEFAULT_EMPRESA=01
SAE_VERSION=10
SAE_LOG_LEVEL=INFO4. Diagnóstico de Conexión
Ejecuta el script de diagnóstico para verificar que la base de datos y las tablas de multialmacén respondan:
python test_connection.py🔌 Configuración en Clientes MCP
En Antigravity / Claude Desktop / Cursor (mcp_config.json o claude_desktop_config.json)
Opción 1: Ejecutando el módulo Python con entorno virtual
{
"mcpServers": {
"aspel-sae": {
"command": "C:\\ruta\\a\\tu\\proyecto\\.venv\\Scripts\\python.exe",
"args": ["-m", "sae_mcp.server"],
"cwd": "C:\\ruta\\a\\tu\\proyecto",
"env": {
"SAE_HOST": "localhost",
"SAE_PORT": "3050",
"SAE_DATABASE_PATH": "C:/Program Files (x86)/Common Files/Aspel/Sistemas Aspel/SAE 10.00/Datos/Empresa01/SAE100EMPRE01.FDB",
"SAE_USER": "SYSDBA",
"SAE_PASSWORD": "masterkey",
"SAE_CHARSET": "WIN1252",
"SAE_DEFAULT_EMPRESA": "01",
"SAE_VERSION": "10"
}
}
}
}Opción 2: Ejecutando el script de consola (sae-mcp) tras pip install -e .
{
"mcpServers": {
"aspel-sae": {
"command": "C:\\ruta\\a\\tu\\proyecto\\.venv\\Scripts\\sae-mcp.exe",
"args": [],
"cwd": "C:\\ruta\\a\\tu\\proyecto"
}
}
}🧰 Catálogo de Herramientas y Recursos
Herramientas Expuestas al Agente (MCP Tools)
Herramienta | Parámetros Clave | Descripción |
|
| Lista todos los almacenes registrados en |
|
| Existencia y límites de stock por almacén en |
|
| Resumen de piezas, total de artículos y alertas de stock bajo mínimo. |
|
| Historial de movimientos (entradas/salidas/traspasos) en |
|
| Búsqueda por clave o descripción con desglose multialmacén. |
|
| Ficha técnica completa del artículo con existencias por almacén. |
|
| Inspección de factura/pedido/remisión con almacén de surtido ( |
|
| Datos comerciales, saldo, límite de crédito y RFC en |
|
| Diccionario de datos y relaciones de la tabla indicada. |
|
| Consulta SQL libre de solo lectura con guardrails y paginación |
Recursos MCP (MCP Resources)
sae://warehouses: Listado JSON de todos los almacenes.sae://schema/dictionary: Diccionario de datos completo y diferencias SAE 8 vs 10.sae://company/info: Configuración actual y estado del servicio.
🧪 Pruebas Automatizadas
Para ejecutar las pruebas unitarias y de seguridad:
.\.venv\Scripts\python.exe -m pytest tests/ -vLas pruebas cubren:
Inyección de cláusula
FIRST ny preservación deSKIP men Firebird 2.5.Bloqueo de inyecciones de sentencias múltiples con punto y coma.
Rechazo absoluto de sentencias
INSERT,UPDATE,DELETE,DROP,ALTER,TRUNCATE,EXECUTE.Validación estricta contra inyección SQL en el identificador de
empresa.Mapeo y serialización de modelos Pydantic de Multialmacén y Documentos.
🔒 Recomendaciones de Seguridad para Producción
Usuario de Base de Datos de Solo Lectura: Aunque el servidor MCP implementa validación de sintaxis AST (Abstract Syntax Tree) con
sqlgloty transacciones conROLLBACKobligatorio, se recomienda enfáticamente crear un usuario específico en Firebird 2.5 con permisos exclusivos de lectura:/* En Firebird 2.5 */ CREATE USER MCP_READONLY PASSWORD 'tu_password_segura'; GRANT SELECT ON ALMACENES01 TO MCP_READONLY; GRANT SELECT ON INVE01 TO MCP_READONLY; GRANT SELECT ON MULT01 TO MCP_READONLY; GRANT SELECT ON MINVE01 TO MCP_READONLY; GRANT SELECT ON FACTF01 TO MCP_READONLY; GRANT SELECT ON PAR_FACTF01 TO MCP_READONLY; GRANT SELECT ON CLIE01 TO MCP_READONLY;Protección del Archivo
.env: Nunca incluyas tu archivo.enven el control de versiones. Asegúrate de mantenerlo en tu.gitignore.Restricción de Red para Firebird (Puerto 3050): No expongas el puerto 3050 de Firebird a Internet. Mantén la base de datos accesible únicamente por
localhost, red LAN o a través de un túnel seguro / VPN.
📄 Licencia
Este proyecto se distribuye bajo la licencia MIT.
⚖️ Descargo de Responsabilidad (Disclaimer)
Este proyecto es una herramienta de código abierto desarrollada de manera independiente por la comunidad y no está afiliado, respaldado, patrocinado ni asociado oficialmente con Siigo ni Aspel de México, S.A. de C.V.
ASPEL, ASPEL SAE, ASPEL COI y sus logotipos son marcas registradas propiedad de sus respectivos titulares. Su mención en este repositorio tiene fines meramente descriptivos y de compatibilidad técnica.
Available Tools
10 toolsexplain_sae_tableA
Explica la estructura, propósito de negocio, campos clave y relaciones de una tabla de Aspel SAE. Útil para comprender tablas como MULT, INVE, ALMACENES, MINVE, FACTF, etc.
Args: table_name: Nombre de la tabla (ej. 'MULT', 'INVE', 'ALMACENES', 'MINVE', 'FACTF').
Inputs: table_name (required). Returns: result
get_client_infoC
Consulta los datos comerciales, RFC, dirección, saldo y límite de crédito de un cliente (CLIE).
Args: clave_cliente: Clave del cliente en Aspel SAE. empresa: Clave de empresa (opcional).
Inputs: clave_cliente (required), empresa. Returns: result
get_document_detailsA
Consulta un documento comercial (factura, pedido, remisión o cotización) y el desglose de sus partidas, identificando de qué almacén (NUM_ALM) proviene o fue asignada cada mercancía.
Args: cve_doc: Folio del documento (ej. '1024' o 'A1024'). tipo_doc: Tipo de documento: 'factura', 'pedido', 'remision' o 'cotizacion'. empresa: Clave de empresa (opcional).
Inputs: cve_doc (required), empresa, tipo_doc. Returns: result
get_product_detailB
Obtiene la ficha técnica completa de un artículo, incluyendo si maneja multialmacén (CON_CTRL_ALM) y las existencias detalladas en cada almacén activo.
Args: cve_art: Clave del artículo. empresa: Clave de empresa (opcional).
Inputs: cve_art (required), empresa. Returns: result
get_product_kardexA
Consulta el historial de movimientos de inventario (Kardex en MINVE[EE]) de un producto. Permite auditar entradas, salidas por ventas, compras o traspasos entre almacenes.
Args: cve_art: Clave del artículo. cve_alm: Filtrar movimientos de un almacén particular (opcional). fecha_inicio: Fecha filtro inicial en formato 'YYYY-MM-DD' o 'DD.MM.YYYY' (opcional). limit: Cantidad máxima de movimientos a retornar (máx 200). empresa: Clave de empresa (opcional).
Inputs: cve_art (required), limit, cve_alm, empresa, +1 more. Returns: result
get_stock_by_warehouseA
Consulta las existencias y stocks mínimo/máximo de un producto en un almacén específico o en todos. Cruza la tabla MULT[EE] con ALMACENES[EE].
Args: cve_art: Clave del artículo en el catálogo de SAE. cve_alm: Clave numérica del almacén (opcional). Si no se indica, regresa el stock en todos los almacenes. empresa: Clave de empresa (opcional).
Inputs: cve_art (required), cve_alm, empresa. Returns: result
get_warehouse_summaryB
Obtiene un resumen cuantitativo y alertas de un almacén: total de artículos, piezas acumuladas y conteo/lista de artículos con existencia por debajo del stock mínimo.
Args: cve_alm: Clave numérica del almacén. empresa: Clave de empresa (opcional).
Inputs: cve_alm (required), empresa. Returns: result
list_warehousesA
Lista todos los almacenes registrados en ASPEL SAE (tabla ALMACENES).
Args: empresa: Clave de empresa a consultar (ej. '01'). Si se omite, usa la predeterminada.
Inputs: empresa. Returns: result
query_sae_read_onlyA
Ejecuta una consulta SQL SELECT arbitraria de SOLO LECTURA sobre la base de datos Firebird 2.5.
PROTECCIONES AUTOMÁTICAS:
Valida mediante AST que NO contenga sentencias INSERT, UPDATE, DELETE, DROP, ALTER ni EXECUTE.
Rechaza inyección de sentencias múltiples con punto y coma.
Inyecta automáticamente la cláusula 'FIRST N' de Firebird 2.5 para evitar desbordes.
Args: sql_query: Sentencia SELECT a ejecutar. max_rows: Límite de filas (máx 200 por defecto).
Inputs: sql_query (required), max_rows. Returns: result
search_productsB
Busca productos en el catálogo de ASPEL SAE por clave o descripción. Incluye el desglose de existencias por almacén si el producto maneja multialmacén.
Args: query: Término de búsqueda (clave o texto descriptivo). cve_alm: Filtrar únicamente productos que tengan stock > 0 en este almacén (opcional). linea: Filtrar por línea de producto (opcional). status: 'A' (Activo), 'B' (Baja), 'S' (Suspendido). Default 'A'. limit: Cantidad máxima de artículos a retornar (máx 100). empresa: Clave de empresa (opcional).
Inputs: query (required), limit, linea, status, +2 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Most tools have distinct resource+action targets. Some overlap exists among get_stock_by_warehouse, get_product_detail, and search_products because all expose stock data, but the descriptions make the intended use identifiable.
All tool names follow a consistent snake_case verb_noun pattern such as list_warehouses, get_product_kardex, and search_products. The occasional preposition like by_warehouse is still readable and does not break the overall pattern.
Ten tools is well-scoped for an ERP-focused MCP server covering warehouse, product, document, client, and schema lookup. Each tool has a clear role and none feel redundant.
The read-only inventory domain is well covered: warehouses, stock, kardex, product search/detail, documents, clients, and table exploration. The main gap is the lack of direct list endpoints, but query_sae_read_only and explain_sae_table provide a workaround.
Maintenance
Related MCP Connectors
TOTVS Protheus ERP for AI: stock, sales, orders, customers and MRP. Read-only, official API.
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
Connect QuickBooks Online to AI agents with secure read or write access across multiple companies.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to securely connect to and query Microsoft SQL Server databases with read-only access, schema discovery, and relationship mapping. Features advanced security protections, health monitoring, and bulk operations for production environments.995 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to connect and query Microsoft SQL Server databases using natural language, executing read-only SQL queries for safe data inspection and analysis.MIT
- AlicenseAqualityDmaintenanceEnables AI agents to safely interact with MySQL/MariaDB databases, supporting read-only queries by default with optional write operations and access control.8MIT
- AlicenseAqualityDmaintenanceProvides read-only MySQL database operations for AI agents, supporting multiple database servers with tools for listing tables, describing schemas, and executing SELECT queries.6MIT