Skip to main content

MCP Server for ERP integration

Project description

ERP MCP Server

Servidor MCP (Model Context Protocol) para conectar asistentes de IA con tu ERP empresarial. Este servidor permite a Claude, Cursor y otros clientes MCP consultar información de clientes, proveedores y documentos a través de la API de tu ERP.

✨ Características

  • Buscar clientes por nombre y obtener su código
  • Buscar proveedores por nombre y obtener su código
  • Consultar documentos de clientes (por nombre o código)
  • Consultar documentos de proveedores (por nombre o código)
  • Resolución automática de nombres a códigos
  • Manejo de múltiples resultados con sugerencias
  • Formato de respuesta claro y estructurado

📋 Requisitos

  • Python 3.9 o superior
  • Acceso a la API del ERP
  • Token de autenticación del ERP
  • IP y puerto del servidor ERP

🔧 Instalación

1. Clonar el repositorio

git clone https://github.com/tu-usuario/erp-mcp-server.git
cd erp-mcp-server

2. Crear entorno virtual (recomendado)

# En Windows
python -m venv venv
venv\Scripts\activate

# En Linux/Mac
python3 -m venv venv
source venv/bin/activate

3. Instalar dependencias

pip install -r requirements.txt

4. Configurar variables de entorno

Crea un archivo .env en la raíz del proyecto:

ERP_USER=usuario
ERP_PSWD=password
ERP_EMGES=empresa
ERP_APL=aplicacion
ERP_EMP=ejercicio
ERP_APLICACION=aplicacion_mcp
ERP_IP=ip_servidor
ERP_PORT=puerto_servidor
ERP_TIMEOUT=30
ERP_SSL_VERIFY=False
Variable Descripción Ejemplo
ERP_IP IP del servidor ERP ip_servidor
ERP_PORT Puerto del servidor ERP puerto_servidor
ERP_USER Usuario para la API del ERP usuario
ERP_PSWD Contraseña para la API del ERP password
ERP_EMGES Código de empresa/gestión (EMGES) empresa
ERP_APL Aplicación específica (APL) aplicacion
ERP_EMP Código de empresa (EMP) ejercicio
ERP_APLICACION Nombre de la aplicación (APLICACION) aplicacion_mcp
ERP_TIMEOUT Timeout en segundos (opcional) 30
ERP_SSL_VERIFY Verificar SSL (opcional) False

🚀 Cómo Ejecutar el Servidor

Ejecución directa

python server.py

Verás un mensaje como:

INFO:erp-mcp-server:Servidor MCP ERP inicializado. Conectando a: http://192.168.1.100:8080/api

Ejecución con el inspector MCP (para pruebas)

mcp dev server.py

🔌 Configuración con Clientes MCP

Claude Desktop

Edita el archivo de configuración de Claude Desktop:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "mcp-testaserver": {
      "command": "uvx",
      "args": [
        "-m",
        "mcp_testaserver"
      ],
      "env": {
        "ERP_USER": "usuario",
        "ERP_PSWD": "password",
        "ERP_EMGES": "empresa",
        "ERP_APL": "aplicacion",
        "ERP_EMP": "ejercicio",
        "ERP_APLICACION": "aplicacion_mcp",
        "ERP_IP": "ip_servidor",
        "ERP_PORT": "puerto_servidor"
      }
    }
  }
}

Cursor

En Cursor, ve a Settings > MCP Servers y añade:

{
  "command": "uvx",
  "args": ["-m", "mcp_testaserver"]
}

VS Code con extensión MCP

Añade a tu configuración de VS Code:

{
  "mcp.servers": {
    "mcp-testaserver": {
      "command": "uvx",
      "args": ["-m", "mcp_testaserver"]
    }
  }
}

🛠️ Herramientas Disponibles

El servidor expone las siguientes herramientas MCP:

1. buscar_cliente

Busca clientes por nombre y devuelve sus códigos.

Parámetros:

  • nombre (string, requerido): Nombre del cliente a buscar

Ejemplo:

buscar_cliente(nombre="Martínez")

2. buscar_proveedor

Busca proveedores por nombre y devuelve sus códigos.

Parámetros:

  • nombre (string, requerido): Nombre del proveedor a buscar

Ejemplo:

buscar_proveedor(nombre="Proveedor SA")

3. buscar_documentos_cliente

Busca documentos de un cliente. Si se proporciona un nombre, primero resuelve el código.

Parámetros:

  • identificador (string, requerido): Nombre o código del cliente
  • es_codigo (boolean, opcional): true si el identificador es código, false si es nombre

Ejemplos:

# Por nombre (resuelve automáticamente el código)
buscar_documentos_cliente(identificador="García")

# Por código (más rápido si ya conoces el código)
buscar_documentos_cliente(identificador="CLI001", es_codigo=true)

4. buscar_documentos_proveedor

Busca documentos de un proveedor. Si se proporciona un nombre, primero resuelve el código.

Parámetros:

  • identificador (string, requerido): Nombre o código del proveedor
  • es_codigo (boolean, opcional): true si el identificador es código, false si es nombre

Ejemplos:

# Por nombre
buscar_documentos_proveedor(identificador="Distribuciones")

# Por código
buscar_documentos_proveedor(identificador="PROV001", es_codigo=true)

📝 Ejemplos de Uso

Una vez configurado, puedes hacer consultas como:

Buscar un cliente

Usuario: "Busca el cliente García y dime su código"

Asistente: 🔍 Clientes encontrados para 'García':

1. García Hermanos S.L.
   • Código: CLI-123
   • Email: info@garciahermanos.es
   • Teléfono: 912345678

2. María García López
   • Código: CLI-456
   • Email: maria.garcia@email.com

Documentos de un cliente por nombre

Usuario: "Muéstrame los documentos del cliente Martínez"

Asistente: 📄 Documentos de Martínez Importaciones (código CLI-789):

1. FACTURA F2024-001
   • Fecha: 2024-01-15
   • Importe: 1.234,56 €
   • Estado: Pagada

2. PEDIDO P2024-089
   • Fecha: 2024-02-20
   • Importe: 3.450,00 €
   • Estado: Pendiente

Documentos de proveedor con múltiples resultados

Usuario: "Busca documentos del proveedor 'Distribuciones'"

Asistente: ⚠️ Se encontraron múltiples proveedores con ese nombre:

• Distribuciones Martínez (Código: PROV-001)
• Distribuciones García (Código: PROV-002)
• Distribuciones del Norte (Código: PROV-003)

Por favor, especifica usando el código con es_codigo=True

🔧 Adaptación a tu ERP

Este servidor está diseñado para ser adaptado a cualquier ERP. Necesitarás modificar:

1. Endpoints de la API (en erp_client.py)

# Adapta estos endpoints según tu ERP
result = self._request("GET", "clientes/search", ...)  # ← Cambia 'clientes/search'
result = self._request("GET", f"clientes/{codigo}/documentos", ...)  # ← Cambia la ruta

2. Estructura de respuestas

# Adapta según la estructura JSON de tu ERP
datos = result.get("data", result.get("clientes", []))  # ← Ajusta las claves
codigo = item.get("codigo", item.get("id", ""))  # ← Ajusta los nombres de campo

3. Modelos de datos

Si tu ERP usa nombres de campos diferentes, ajusta los dataclasses en erp_client.py:

@dataclass
class Cliente:
    codigo: str  # ← Cómo se llama en tu ERP: "id", "code", "customerId"?
    nombre: str  # ← "name", "razonSocial", "fullName"?
    email: Optional[str] = None
    telefono: Optional[str] = None

🐛 Depuración

Ver logs del servidor

# Ejecuta con logging detallado
python server.py --debug

Probar la conexión al ERP

Crea un script test_connection.py:

from erp_client import ERPClient

client = ERPClient()
print(f"Conectando a: {client.base_url}")

# Prueba búsqueda
clientes = client.buscar_clientes("test")
print(f"Clientes encontrados: {len(clientes)}")
for c in clientes:
    print(f"  - {c.nombre} (código: {c.codigo})")

Usar el inspector MCP

mcp inspect server.py

🤝 Contribuir

Las contribuciones son bienvenidas. Por favor:

  1. Fork el proyecto
  2. Crea una rama (git checkout -b feature/mejora)
  3. Commit tus cambios (git commit -am 'Añade nueva funcionalidad')
  4. Push a la rama (git push origin feature/mejora)
  5. Abre un Pull Request

📄 Licencia

MIT License - ver archivo LICENSE para más detalles.

⚠️ Solución de Problemas

Error: "No module named 'mcp'"

pip install -r requirements.txt

Error de conexión al ERP

  • Verifica que el ERP sea accesible desde tu red
  • Comprueba token, IP y puerto en el archivo .env
  • Prueba la conectividad con ping o telnet

Múltiples resultados inesperados

Usa el parámetro es_codigo=True cuando ya conozcas el código exacto.

Timeout en las peticiones

Aumenta ERP_TIMEOUT en el archivo .env si el ERP es lento.

📞 Soporte

Si encuentras algún problema o tienes preguntas:


Desarrollado con ❤️ usando Model Context Protocol

Project details


Download files

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

Source Distribution

mcp_testaserver-0.1.0.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

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

mcp_testaserver-0.1.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file mcp_testaserver-0.1.0.tar.gz.

File metadata

  • Download URL: mcp_testaserver-0.1.0.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mcp_testaserver-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7af07b5dd8514d9f8f94623f5d2b6026b238720fd7e7c7131ca78c3edb335c26
MD5 18ada22f066da2f97d053f1a2a68e357
BLAKE2b-256 1059f318455ac80bed0cc4b2578f45dd0b4b4b3776c3df6a592c22c4552e0d9b

See more details on using hashes here.

File details

Details for the file mcp_testaserver-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_testaserver-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 136bb626900fbe43c5b1e6624feff772f64654d73dfa1ac3c18b67dff9655df4
MD5 cec7b62f39ef1cc59bc370aacb39a7f2
BLAKE2b-256 6f828910d5fd1bc2960174a5d2bbf1e3ca35a321b7e00b8c5ba3e5559fa0855e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page