Token导航 LogoToken导航TokenDH.com
MCP Server Industrial logo
办公协作stdio官方级别未说明来源级核验

MCP Server Industrial

MCP Server

专为Fachmann设计的B2B商业辅助系统,提供CRM工具和智能报价机器人,支持销售流程自动化和技术规范查询。

工具数

5

提示词数

0

GitHub Stars

0

资源数

0
PythonClaude团队协作Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

daniguzman32

提供方

daniguzman32

最后核验

2026/5/17 20:19

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python -m venv .venv

详细介绍

fachmann-mcp

Sistema de asistencia comercial B2B para Fachmann, representante en Argentina de PILZ (seguridad funcional), OBO Bettermann (gestión de cables), CABUR (borneras y conectores) e IDEM Safety (dispositivos de seguridad perimetral).

Compuesto por dos servicios independientes desplegados en Railway:

  • MCP Server (web): servidor HTTP que expone herramientas CRM a clientes MCP (Claude Desktop, agentes, etc.).
  • Telegram Bot (worker): cotizador técnico conversacional que recibe requerimientos en lenguaje natural, guía al vendedor con preguntas técnicas mediante botones inline, y devuelve una propuesta técnica en PDF con borrador de email.

Architecture

                         ┌─────────────────────────────────────────┐
                         │              Railway                      │
                         │                                           │
┌──────────────┐  HTTP   │  ┌──────────────────────────────────────┐│
│ Claude       │◄────────┤  │  web service (MCP HTTP Server)       ││
│ Desktop /    │         │  │  python src/server.py                ││
│ MCP Client   │         │  │  FastMCP + asyncpg                   ││
└──────────────┘         │  │  Port: $PORT (Railway) / 8000 (local)││
                         │  └──────────────────┬───────────────────┘│
                         │                     │                     │
                         │           PostgreSQL │ (Railway plugin)   │
                         │                     │                     │
                         │  ┌──────────────────┴───────────────────┐│
                         │  │  worker service (Telegram Bot)       ││
                         │  │  python src/bot.py                   ││
                         │  │  python-telegram-bot + cotizador.py  ││
                         │  └──────────────────────────────────────┘│
                         │                     │                     │
                         └─────────────────────┼─────────────────────┘
                                               │ Anthropic API
                                               ▼
                                   ┌───────────────────────┐
                                   │  Claude Haiku 4.5     │
                                   │  Function calling:    │
                                   │  buscar_catalogo      │
                                   │  consultar_disponib.  │
                                   │  listar_tarifas       │
                                   └───────────────────────┘

Flujo del Telegram Bot:
 Vendedor ──► mensaje de texto ──► bot.py
                                     │
                              cotizador.py (agentic loop)
                                     │
                         ┌───────────┴───────────┐
                         │                       │
                   Claude API ◄──► PostgreSQL catalog
                         │
                   resultado JSON (tipo)
                         │
          ┌──────────────┼──────────────┐
          │              │              │
       propuesta       preguntas    sin_resultado
          │           (wizard)
          │         botones inline
    ┌─────┴──────┐   por pregunta
    │            │
pdf_generator  email_draft
(ReportLab)   (Markdown)
    │
PDF bytes ──► Telegram reply_document

Features

MCP Server (CRM tools)

  • Búsqueda de texto libre en el catálogo de 27.626 productos (PILZ, OBO, CABUR, IDEM Safety) con filtro por marca
  • Consulta de precio exacto, stock disponible, tiempo de entrega y precio neto con descuento por tarifa
  • Recuperación de perfil completo de clientes/prospectos: datos de contacto, estado del lead, últimas interacciones y oportunidades activas
  • Registro de interacciones (reunión, email, llamada, whatsapp, nota) con timestamp automático
  • Gestión de oportunidades de venta: creación y actualización de etapa en el pipeline

Telegram Bot (Cotizador Técnico)

  • Requerimientos en lenguaje natural sin estructura requerida
  • Wizard de preguntas técnicas con botones inline: cuando falta información, el bot presenta preguntas con opciones en teclado Telegram (no text input). Cada pregunta incluye contexto técnico, referencia normativa y opción "No sé" con asunción segura
  • Descuentos por tarifa en cascada: /tarifa activa una tarifa de descuento para la sesión; el cotizador calcula precio = lista × (1-d1) × (1-d2) × (1-d3) automáticamente
  • TTL de sesión: estado del wizard auto-expira a los 30 minutos con notificación al usuario
  • Prioridad de marcas: PILZ para seguridad funcional, IDEM Safety como complemento, OBO y CABUR para infraestructura
  • Genera PDF de propuesta comercial numerada y lo adjunta directamente en el chat
  • Borrador de email profesional listo para copiar
  • Fallback a resumen en texto Markdown si el generador de PDF no está disponible
  • /cliente — perfil completo + historial de interacciones + oportunidades activas
  • /nueva — cancela el wizard activo y limpia el estado de la sesión

Normativa integrada

  • System prompt embebe ISO 13849-1:2015 (PL a–e, Categorías 1–4)
  • Guías técnicas de selección por marca en src/guides/ (pilz.md, idem_safety.md, obo.md, cabur.md)
  • Cada pregunta del wizard incluye nivel_criticidad (alta/media/baja) y referencia_normativa
  • Justificación normativa incluida en cada línea de producto de la propuesta

Tech Stack

ComponenteTecnologíaVersión
MCP ServerFastMCP (Python)mcp[cli] >=1.0
Async DB driverasyncpglatest
Base de datosPostgreSQL (Railway plugin)15+
Telegram Botpython-telegram-bot>=21.0
LLM / Function callingAnthropic Claude API (claude-haiku-4-5-20251001)anthropic SDK
PDF generationReportLablatest
Config managementpython-dotenvlatest
DeploymentRailway (Nixpacks builder)
RuntimePython 3.11+

Project Structure

fachmann-mcp/
├── Procfile                  # Railway: proceso web y worker
├── nixpacks.toml             # Build config Railway (system deps)
├── requirements.txt          # Dependencias Python
├── .env.example              # Plantilla de variables de entorno
├── src/
│   ├── __init__.py
│   ├── server.py             # MCP HTTP server — herramientas CRM
│   ├── setup_db.py           # Inicializa schema PostgreSQL (idempotente)
│   ├── migrar_db.py          # Migración: IDEM Safety + reglas_descuento
│   ├── cotizador.py          # Agentic loop Claude + function calling
│   ├── bot.py                # Telegram bot — wizard inline keyboards
│   ├── pdf_generator.py      # Genera PDF con ReportLab
│   └── guides/               # Guías técnicas de selección por marca
│       ├── pilz.md
│       ├── idem_safety.md
│       ├── obo.md
│       └── cabur.md
└── tests/
    ├── __init__.py
    └── test_cotizador.py
importar_catalogo.py y archivos *.xlsx son privados y están en .gitignore.

Setup — Local Development

Prerequisites

  • Python 3.11+
  • PostgreSQL accesible (local o Railway public URL)

1. Clonar y crear entorno virtual

git clone 
cd fachmann-mcp

python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux / macOS
source .venv/bin/activate

pip install -r requirements.txt

2. Configurar variables de entorno

cp .env.example .env
# Editar .env con los valores reales

3. Inicializar la base de datos

python src/setup_db.py

Crea el schema completo (5 tablas) en PostgreSQL. Es idempotente: se puede correr múltiples veces sin problemas.

4. Correr los servicios

# MCP server (transporte HTTP por defecto)
python src/server.py

# Telegram bot (en otra terminal)
python src/bot.py

Para usar stdio (Claude Desktop):

MCP_TRANSPORT=stdio python src/server.py

5. Correr tests

pytest

Setup — Railway Deployment

Procfile

web:    python src/setup_db.py && python src/server.py
worker: python src/setup_db.py && python src/bot.py

Pasos

  1. Crear proyecto en Railway y conectar el repositorio GitHub.
  2. Agregar el PostgreSQL plugin al proyecto. Railway inyecta DATABASE_URL automáticamente.
  3. Crear dos servicios dentro del mismo proyecto:

- Servicio web: proceso web del Procfile. - Servicio worker: proceso worker del Procfile.

  1. Configurar las variables de entorno en cada servicio (ver tabla abajo).
  2. Railway asigna $PORT automáticamente al servicio web.
Importante: usar siempre DATABASE_URL (URL interna del plugin) desde los contenedores Railway. DATABASE_PUBLIC_URL es solo para acceso externo desde scripts locales de administración.

Environment Variables

VariableRequeridaDefaultDescripción
DATABASE_URLURL interna de PostgreSQL (inyectada por Railway plugin).
ANTHROPIC_API_KEYAPI key de Anthropic. Usada por cotizador.py.
TELEGRAM_TOKENSí (worker)Token del bot de Telegram obtenido via BotFather.
CLAUDE_MODELNoclaude-haiku-4-5-20251001ID del modelo Claude. Usar claude-sonnet-4-6 para mayor calidad.
MCP_PORTNo8000Puerto local del MCP server. En Railway se sobreescribe con $PORT.
MCP_HOSTNo0.0.0.0Host bind del MCP server.
MCP_TRANSPORTNostreamable-httpTransporte del MCP server. Opciones: streamable-http, stdio.

.env.example:

DATABASE_URL=postgresql://user:password@host:5432/dbname?sslmode=require
TELEGRAM_TOKEN=your_botfather_token_here
ANTHROPIC_API_KEY=your_anthropic_key_here
CLAUDE_MODEL=claude-haiku-4-5-20251001
MCP_PORT=8000

Usage

MCP Tools Reference

El servidor MCP expone herramientas bajo el namespace fachmann. Cualquier cliente MCP compatible puede invocarlas.

fachmann_buscar_catalogo

Busca productos por texto libre en descripción, SKU, categoría y especificaciones.

Input:

CampoTipoRequeridoDescripción
querystringTexto a buscar (ej. "relé seguridad", "bandeja")
marcastring (enum)No"PILZ", "OBO", "CABUR" o "IDEM SAFETY"

Output: { "total_mostrados": int, "productos": [...] } — hasta 20 resultados con sku, marca, categoría, descripción, precio_lista_usd, stock, tiempo_entrega_dias.


fachmann_consultar_disponibilidad

Ficha completa de un producto por SKU: precio de lista, precio neto con descuento de tarifa, análisis de stock vs cantidad solicitada.

Input:

CampoTipoRequeridoDescripción
skustringSKU exacto (ej. "PNOZ-S6-24VDC-2NO")
cantidadintegerNoCantidad requerida para análisis de stock (default: 1)

Output: Ficha del producto + estado_stock (disponible / sin_stock / parcial) + precio_neto_usd (con descuento si hay tarifa activa) + tiempo_entrega_estimado_dias.


fachmann_buscar_contexto_cliente

Perfil de clientes/prospectos por nombre (búsqueda parcial). Incluye últimas interacciones y oportunidades activas.

Input:

CampoTipoRequeridoDescripción
empresastringNombre o fragmento (ej. "Arcor")

Output: Datos de contacto, industria, estado_lead, interacciones_recientes, oportunidades_activas.


fachmann_registrar_interaccion

Registra una interacción en el historial del cliente.

Input:

CampoTipoRequeridoDescripción
cliente_idintID del cliente (obtenido con buscar_contexto_cliente)
notasstringResumen de la interacción y próximos pasos
tipostringNo"reunion", "email", "llamada", "whatsapp" o "nota"

fachmann_gestionar_oportunidad

Crea o actualiza una oportunidad de venta en el pipeline.


Telegram Bot — Comandos

ComandoDescripción
/startMensaje de bienvenida
/ayudaEjemplos de requerimientos
/tarifaVer tarifa activa
/tarifa listaVer todas las tarifas disponibles
/tarifa Activar tarifa de descuento para la sesión
/cliente Perfil completo + historial + oportunidades activas
/nuevaCancelar wizard en curso y empezar de cero

Telegram Bot — Flujo de uso

  1. El vendedor escribe el requerimiento en lenguaje natural:
   Barrera de luz IDEM de 1500mm para zona de acceso, cliente Techint
  1. Si falta información técnica, el bot presenta un wizard de preguntas con botones inline:
   Pregunta 1/3 (seguridad crítica — ISO 13849-1)

   ¿Qué parte del cuerpo se necesita proteger?

   [Dedos (14mm)]  [Mano (25mm)]
   [Cuerpo (90mm)] [No sé / No tengo el dato]
  1. El usuario elige con un click. El bot avanza a la siguiente pregunta automáticamente.
  1. Con toda la información, Claude ejecuta el agentic loop:

- buscar_catalogo("cortina luz IDEM", "IDEM SAFETY") - consultar_disponibilidad("IDEM-SF4B-H1080-14", cantidad=1) - Consolida propuesta JSON

  1. El bot envía:

- PDF adjunto: propuesta numerada con tabla de productos y justificación normativa - Borrador de email: texto profesional listo para enviar

Tarifas de descuento

Los descuentos se aplican en cascada: precio_final = lista × (1-d1) × (1-d2) × (1-d3)

/tarifa Dist. Principal - Pilz 25% - Resto 30+10
/tarifa Pilz System Partner - 30+10
/tarifa 30% OBO - Cabur - Pilz 0%
/tarifa End User (5%)

Database Schema

PostgreSQL en Railway plugin. Inicializado con python src/setup_db.py.

productos_catalogo

ColumnaTipoDescripción
idSERIALPK
skuTEXTCódigo único del producto (UNIQUE NOT NULL)
marcaTEXTPILZ, OBO, CABUR o IDEM SAFETY
categoriaTEXTCategoría del producto
descripcionTEXTDescripción comercial
precio_usdNUMERICPrecio de lista en dólares
especificacionesTEXTEspecificaciones técnicas
stockINTEGERUnidades en stock
tiempo_entrega_diasINTEGERDías de entrega estimados
activoINTEGERFlag lógico (1 = activo)

Datos reales: 27.626 productos (PILZ, OBO, CABUR, IDEM Safety).


clientes_prospectos

ColumnaTipoDescripción
idSERIALPK
razon_socialTEXTNombre de la empresa
contacto_nombreTEXTNombre del contacto principal
contacto_emailTEXTEmail del contacto
contacto_telefonoTEXTTeléfono del contacto
contacto_cargoTEXTCargo del contacto
industriaTEXTSector industrial
estado_leadTEXTnuevo_cliente, calificado, oferta, ganado, perdido, cancelado
notasTEXTNotas internas sobre el cliente
updated_atTEXTTimestamp de última modificación

oportunidades_ventas

ColumnaTipoDescripción
idSERIALPK
cliente_idINTEGERFK a clientes_prospectos.id
descripcionTEXTDescripción de la oportunidad
monto_usdNUMERICValor estimado en dólares
probabilidad_cierreINTEGERPorcentaje (0–100)
etapaTEXTprospecting, qualification, proposal, negotiation, closed_won, closed_lost
fecha_cierre_estimadaTEXTFecha estimada de cierre

interacciones

ColumnaTipoDescripción
idSERIALPK
cliente_idINTEGERFK a clientes_prospectos.id
tipoTEXTreunion, email, llamada, whatsapp o nota
notasTEXTDescripción de la interacción (NOT NULL)
fechaTEXTTimestamp de la interacción

reglas_descuento

Define los porcentajes de descuento en cascada por tarifa y marca.

ColumnaTipoDescripción
idSERIALPK
tarifa_nombreTEXTNombre de la tarifa (ej. "End User (5%)")
marcaTEXTPILZ, OBO, CABUR o IDEM SAFETY
desc_1NUMERICPrimer descuento (%)
desc_2NUMERICSegundo descuento (%)
desc_3NUMERICTercer descuento (%)

Cálculo: precio_final = precio_lista × (1 - desc_1/100) × (1 - desc_2/100) × (1 - desc_3/100)


ISO 13849-1:2015 — Contexto normativo

El cotizador embebe conocimiento normativo de ISO 13849-1:2015 directamente en el system prompt de Claude, complementado con guías técnicas de selección por marca en src/guides/.

Performance Levels (PL) y Categorías

PLCategoríaArquitecturaProducto PILZ típico
PL aSin requisitos de arquitectura específica
PL bCat 1Componente único probado
PL cCat 2Con función de test periódico
PL dCat 3Arquitectura redundante de dos canalesPNOZ XV2
PL eCat 4Redundante + detección de fallas de causa comúnPNOZ s6, PNOZmulti 2

Reglas de selección (codificadas en el system prompt)

AplicaciónProducto recomendado
Parada de emergencia, Cat 4 / PL ePNOZ s6 o PNOZ XV2
Control dos manos, Cat 4PNOZ s6 o PNOZ XV2
Protección de resguardos, Cat 3–4PNOZ XV2
Múltiples funciones de seguridadPNOZmulti 2 (PNOZ-M-B0)
Monitoreo de velocidad seguraPMCprotego DS (SIL 2)
Cortinas de luz / barrerasIDEM Safety (SF4B, SF4C series)
Interruptores de puerta / bordesIDEM Safety

Roadmap

  • [ ] Autenticación del bot por chat_id para restringir acceso al equipo de ventas
  • [ ] Soporte multi-usuario: numeración de propuestas por usuario
  • [ ] Template PDF con logo y estilos corporativos Fachmann
  • [ ] Carga de clientes reales en clientes_prospectos (actualmente datos demo)
  • [ ] Integración con calendario: sugerir fecha de seguimiento al registrar interacción
  • [ ] Exportación de pipeline a CSV desde el MCP server
  • [ ] Wizard de preguntas multi-step tipo grafo de riesgo (máquina → función → PL → tensión)

License

Propietario — uso interno Fachmann. No redistribuir.

目录标签

目录标签

PythonClaude团队协作CRM工具本地部署智能报价销售自动化技术规范查询B2B商业辅助

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

api-key

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

5

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdioapi-key部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP