Skip to main content
Glama
RudrenduPaul

Electronics RFQ Agent

I'll now generate final output exactly

Electronics RFQ Agent

Tus ingenieros de ventas dedican de 2 a 4 horas a convertir documentos RFQ en presupuestos. Esto lo hace en segundos.

Electronics RFQ Agent es una biblioteca de Python y un CLI que lee documentos RFQ (PDF, Excel, Word), busca cada línea de pedido en el catálogo de tu ERP y genera un borrador de presupuesto. Se conecta a SAP, Epicor, Oracle y Microsoft Dynamics a través de servidores MCP, por lo que funciona con Claude, GPT-4 o cualquier framework de agentes que hable MCP.

CI PyPI version Python 3.10+ License:MIT OpenSSF Scorecard


[ Terminal recording showing erfa --help listing the quote and audit subcommands, then erfa audit printing a full fill-rate report for a five-line RFQ against the mock ERP backend ](docs/demo.gif)

Table of contents

Related MCP server: databid

Install

pip install electronics-rfq-agent-cli
# or
uv add electronics-rfq-agent-cli

Para instalarlo desde el código fuente:

git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
pip install -e .
# or, with uv:
uv sync

El procesamiento de documentos RFQ (PDF, Excel, Word) llama a la API de Anthropic, así que establece ANTHROPIC_API_KEY antes de ejecutar cualquier cosa que toque un documento real:

export ANTHROPIC_API_KEY="sk-ant-..."

No necesitas esta clave para ejecutar erfa audit sobre un archivo de presupuesto existente, ni para explorar el CLI con --help. Solo el procesamiento de documentos llama a Claude.

El problema que resuelve

Trabajábamos con distribuidores de electrónica que tenían de 3 a 5 ingenieros de ventas dedicando la mayor parte de su día a la introducción de presupuestos. Cada herramienta que probamos estaba atada a un ERP específico o requería un proyecto de integración de 6 meses. Queríamos algo que funcionara con lo que los distribuidores ya tenían, que pudiera alojarse en sus propias instalaciones (los datos de presupuestos son sensibles) y que fuera verdaderamente extensible.

La arquitectura MCP hace que añadir un nuevo ERP sea solo escribir un archivo. El analizador trata los formatos de documentos que realmente envían los distribuidores: PDF rellenados a mano, archivos Excel de varias hojas y alguna tabla escaneada ocasional.

Inicio rápido

No se requiere ningún sistema ERP para probarlo; el backend mock incluye 200 componentes electrónicos realistas. Sí necesitas ANTHROPIC_API_KEY definida, porque el procesamiento del documento RFQ sigue siendo una llamada real a Claude:

from electronics_rfq_agent import QuoteAgent
from electronics_rfq_agent.mcp.mock import MockERP

agent = QuoteAgent(erp=MockERP())
quote = agent.run_sync("path/to/rfq.xlsx")

for line in quote.lines:
    print(f"{line.rfq_line.part_number}: {line.status} @ {line.unit_price}")

print(quote.summary())

MockERP aplica automáticamente tarifas por cantidad: qty >= 1000 obtiene un 20 % de descuento, qty >= 100 obtiene un 10 % de descuento y qty >= 10 obtiene un 5 % de descuento. El precio de lista se aplica por debajo de qty 10. Esto refleja los descuentos por volumen reales, de modo que las pruebas comparativas y los tests de integración reflejan curvas de coste realistas.

Conecta con un ERP real:

from electronics_rfq_agent import QuoteAgent
from electronics_rfq_agent.mcp import EpicorMCP

agent = QuoteAgent(
    erp=EpicorMCP(base_url="https://your-epicor.company.com", api_key="..."),
    max_concurrent=10,  # parallel ERP lookups (default: 10)
)
quote = agent.run_sync("rfq_2026_0619.xlsx")
print(quote.summary())

Comandos

erfa incluye dos subcomandos. Todas las opciones siguientes están extraídas directamente de erfa --help.

Comando

Argumentos

Opciones

Qué hace

Un comando erfa quote

rfq (ruta, obligatorio)

--mock, --margin <float> (por defecto 0.15), --output/-o <path>

Analiza un archivo RFQ y imprime un borrador de presupuesto. Necesita ANTHROPIC_API_KEY; el procesador siempre pasa por Claude, --mock solo cambia el backend de ERP.

erfa audit

quote_file (ruta, obligatorio)

ninguna

Imprime un informe de auditoría completo (encontrado / sustituido / no encontrado, tasa de cobertura) para un archivo JSON de presupuesto guardado con erfa quote --output. Solo lee un archivo local, no necesita clave API.

erfa mcp

ninguna

ninguna

Lanza un servidor MCP stdio que expone quote_rfq, lookup_part y audit_quote como herramientas tipadas, de modo que cualquier agente compatible con MCP (Claude, GPT-4, Gemini) pueda llamarlas directamente sin recurrir al CLI. Configura el cliente MCP con el comando erfa mcp.

# Generate a quote from an RFQ file against the mock ERP
export ANTHROPIC_API_KEY="sk-ant-..."
erfa quote rfq.xlsx --mock

# Save the quote as JSON for later inspection
erfa quote rfq.xlsx --mock --output quote.json

# Audit what happened: what was found, substituted, or missing and why
erfa audit quote.json

Ejemplo de salida de audit (salida real generada al ejecutar erfa audit docs/example-quote.json, usando la lógica de precios del mock ERP sobre el RFQ de muestra en tests/fixtures/sample_rfq.txt):

Audit Report - Quote df9fd083
RFQ Source : tests/fixtures/sample_rfq.txt
Lines      : 5
Total      : USD 64.04

FOUND (4)
------------------------------------------------------------
  L  1  RES-0402-10K-1PCT               qty=1000  unit=0.0064  ext=6.40
  L  2  CAP-100NF-50V-X7R-0402          qty=500  unit=0.0104  ext=5.20
  L  3  IC-LM358-SOIC8                  qty=50  unit=0.7101  ext=35.50
  L  4  XTAL-16MHZ-SMD                  qty=25  unit=0.6774  ext=16.94

NOT FOUND (1)
------------------------------------------------------------
  L  5  MOSFET-NMOS-20V-3A-SOT23        Part 'MOSFET-NMOS-20V-3A-SOT23' not found in ERP catalog

Fill rate: 80%  (4 found / 0 substituted / 1 not found)

Partes con precio cero: si una parte existe en el catálogo ERP pero tiene un precio unitario de $0.00, el agente presupuesta $0 en lugar de omitir la línea y añade un mensaje en line.notes indicándote el precio cero para que lo detectes antes de presupuestar al cliente. Revisa en line.notes cualquier línea encontrada o sustituida antes de enviar un presupuesto.

Referencia de la API

La referencia completa está en docs/api.md: cada parámetro de QuoteAgent, la interfaz común de los conectores ERP, Quote / QuoteLineItem campo a campo, y la jerarquía de excepciones. Las exportaciones siguientes son las que se obtienen de from electronics_rfq_agent import ... — tomadas de src/electronics_rfq_agent/__init__.py, no deducidas.

                | Exportación | Qué es |
                | --- | --- |
                | `QuoteAgent` | Orquesta el procesamiento + la búsqueda en el ERP + ensamblaje del presupuesto. `run()` (async) y `run_sync()`. |
                | `EpicorMCP`, `SAPMCP`, `OracleMCP`, `DynamicsMCP` | Conectores ERP, uno por cada sistema soportado. Todos implementan la misma interfaz `search_parts` / `get_part` / `get_price` / `check_inventory`. |
                | `MockERP` (de `electronics_rfq_agent.mcp.mock`) | Backint en memoria con 200 partes realistas. Sin credenciales, sin red. |
                | `Quote`, `QuoteLineItem`, `RFQLineItem`, `ERPPartResult`, `ERPConfig` | Modelos Pydantic v2 para el presupuesto, cada línea, la línea RFQ procesada, los datos ERP crudos y la configuración del conector. |
                | `ERPConnectionError`, `RFQParseError` | Las dos excepciones que `QuoteAgent` puede lanzar: errores de conexión/autenticación y documentos ilegibles. Los errores por línea no se lanzan, sino que van en `line.notes`. |
                | `TelemetryCollector`, `TelemetryEvent` | Telemetría local opcional (`telemetry=True` en `QuoteAgent`), solo cuentaos y tiempos, sin contenido RFQ. |

Cómo se diferencia de las alternativas

                    | Electronics RFQ Agent | Proceso manual | SAP Joule | Generic AI (ChatGPT) |
                    | --- | --- | --- | --- |
                    | Soporte de múltiples ERP | SAP + Epicor + Oracle + Dynamics | N/D | Centrado en SAP (Joule Studio puede acceder a fuentes no SAP vía SAP Integration Suite) | Sin acceso a ERP |
                    | Tiempo de presupuesto (50 líneas) | \~15 s | 2-4 horas | No documentado públicamente | N/D |
                    | Alojable en su propio servidor | Sí | N/D | No (servicio en la nube SAP BTP) | No |
                    | Los datos permanecen locales | Sí | Sí | No | No |
                    | Código abierto | MIT | N/D | No | No |
                    | Backend mock de desarrollo | Sí | N/D | No documentado públicamente | N/D |
                    | Compatible con MCP | Sí | N/D | No documentado públicamente | No |

Compatibilidad con ERP

ERP

Estado

Conexión

Documentación

Epicor Kinetic

Compatible

REST API

Configuración

SAP ECC / S/4HANA

Beta (instalación manual)

PyRFC (BAPI)

Configuración

Oracle Cloud SCM

Compatible

REST API

Configuración

Microsoft Dynamics 365

Compatible

Graph API

Configuración

Backend mock

Integrado

En memoria

No se necesita configuración

Nota SAP: pyrfc requiere la biblioteca SAP NetWeaver RFC (SAP NW RFC) que no está en PyPI y debe descargarse manualmente desde el portal de soporte de SAP (se requiere una cuenta con usuario S). Consulta docs/erp-setup/sap.md para instrucciones paso a paso.

Benchmarks

Medido con el backend mock en memoria (200 componentes realistas, no se necesita sistema ERP). Puedes ejecutarlo con el comando:

git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
uv run python benchmarks/run.py

Latencia de búsqueda en ERP (100 búsquedas individuales, backend mock):

P50

P99

Media

0.00025 ms

0.0023 ms

0.00032 ms

Tiempo de ensamblaje de un presupuesto por tamaño de RFQ (parser simulado, sin llamada a la API Anthropic):

Tamaño RFQ

Tiempo de ensamblaje

10 líneas

0.004 s

25 líneas

0.001 s

50 líneas

0.001 s

Estos valores cubren solo la búsqueda en el ERP y el ensamblaje del presupuesto. El analizador RFQ está simulado. En producción, el procesamiento inteligente del documento añade 5–15 s por documento y las búsquedas reales en el ERP añaden 100–500 ms por línea (paralelizadas con el límite max_concurrent=10), lo que da un total realista de aproximadamente 15 s para un RFQ de 50 líneas. Línea base manual: 2–4 horas.

Integración con cualquier framework

Electronics RFQ Agent funciona con cualquier framework de agentes que soporte MCP:

Framework

Instalación

Ejemplo

Claude (integrado)

pip install electronics-rfq-agent-cli

01-basic-quote

LangGraph

pip install 'electronics-rfq-agent-cli[langgraph]'

04-langgraph-agent

OpenAI Agents SDK

pip install electronics-rfq-agent-cli[agents]

05-openai-agents

CrewAI

pip install electronics-rfq-agent-cli[crewai]

n/a

Pruébalo en Docker

git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
cp .env.example .env   # add your ERP credentials and Anthropic API key
docker compose up -d

Tus datos de cotización nunca salen de tu entorno.

Seguridad

  • Escaneo de vulnerabilidades: Trivy escanea cada ejecución de CI (gravedad ALTA/CRÍTICA, la compilación falla si hay hallazgos sin corregir), los resultados se suben a la pestaña de Seguridad de GitHub.

  • Firma de versiones: el flujo de trabajo de versiones firma las ruedas y sdists compiladas con Sigstore y adjunta un SBOM CycloneDX a cada versión de GitHub una vez que se etiqueta una versión.

  • Fijación de dependencias: Dependabot mantiene actualizadas las dependencias de GitHub Actions y Python (actualizaciones de parches semanales, actualizaciones mensuales de Actions).

  • Divulgación: SECURITY.md. Informa de vulnerabilidades de forma privada mediante correo electrónico o avisos de seguridad de GitHub; acuse de recibo en 48 horas, divulgación responsable en 90 días.

Preguntas frecuentes

¿Qué hace realmente Electronics RFQ Agent? Toma un documento de RFQ (PDF, Excel o Word) de un cliente, extrae cada línea de pedido con Claude, busca cada pieza en tu catálogo de ERP a través de un conector MCP y devuelve un borrador de cotización con precio y margen aplicado. Un ingeniero de ventas lo revisa y lo envía en lugar de crearlo desde cero.

¿Está listo para producción? Está en Beta (v0.2.x). La biblioteca principal y los conectores de Epicor, Oracle y Dynamics están cubiertos por CI (lint, mypy estricto, pytest con un umbral de cobertura del 80 %, escaneo de Trivy) en Python 3.10-3.12. El soporte de SAP está marcado explícitamente como Beta y requiere un paso de instalación manual (la biblioteca SAP NetWeaver RFC no está en PyPI).

¿Necesito un sistema ERP para probarlo? No. MockERP incluye 200 piezas electrónicas realistas y aplica niveles de precios basados en la cantidad, por lo que puedes ejecutar el flujo completo de análisis, búsqueda y cotización sin credenciales de ERP. Aún así necesitas ANTHROPIC_API_KEY, ya que el análisis de documentos es una llamada real a Claude. Solo erfa audit (leer un archivo de cotización ya guardado) funciona sin ninguna clave.

¿En qué se diferencia de pedirle a ChatGPT que lea la RFQ? Un modelo de chat genérico puede leer un documento e incluso adivinar precios, pero no tiene conexión con tu catálogo de ERP real, tu inventario ni tus precios de contrato, por lo que se inventa los números. Electronics RFQ Agent busca cada línea de pedido en tus datos de catálogo reales y solo cotiza lo que realmente está en stock al precio de coste real más tu margen configurado.

¿En qué se diferencia de SAP Joule? Joule es el conjunto de asistentes de IA propietario de SAP, integrado en la plataforma en la nube de SAP (SAP BTP) y centrado en los datos de SAP. Electronics RFQ Agent tiene licencia MIT, se autoalojeda y funciona con SAP, Epicor, Oracle y Dynamics a través de la misma interfaz MCP. Tus datos de cotización nunca tienen que salir de tu entorno y no estás atado a un único proveedor de ERP.

¿Cómo llamo a esto desde un agente en lugar de desde la CLI? Ejecuta erfa mcp para lanzar un servidor MCP stdio que expone quote_rfq, lookup_part y audit_quote como herramientas tipadas. Apunta cualquier cliente compatible con MCP (Claude, GPT-4, Gemini o un framework de agentes personalizado) a erfa mcp como comando de lanzamiento, y podrá llamar a esas herramientas directamente con JSON estructurado de entrada y salida, sin necesidad de analizar la salida de la CLI.

¿Qué formatos de documento analiza? PDF (incluidas tablas escaneadas, mediante la capacidad de visión de Claude), Excel (.xlsx/.xls, busca en todas las hojas de cálculo la fila de encabezado de las líneas de pedido) y Word (.docx, lee todas las tablas). Las RFQ en texto plano también funcionan.

¿Qué ocurre con una línea de pedido que no está en el catálogo de ERP? Se marca como not_found con una nota que explica el motivo (en lugar de descartarse silenciosamente o adivinarse) y se excluye del total de la cotización. Ejecuta erfa audit sobre el JSON de la cotización guardada para ver exactamente qué líneas se encontraron, se sustituyeron o faltan, y por qué.

¿Puedo usarlo comercialmente? Sí. Tiene licencia MIT, por lo que puedes usarlo, modificarlo y distribuirlo comercialmente sin regalías ni obligación de abrir tu código. Solo se requiere la atribución mediante el archivo de licencia.

¿Se envían mis datos de RFQ y precios a algún lugar además de Anthropic? Solo el contenido del documento de RFQ se envía a la API de Anthropic para su análisis. Las búsquedas en el ERP van directamente desde tu máquina a tu sistema de ERP a través del conector que configures: no hay ningún servicio intermediario y no se almacena nada fuera de tu propio entorno, salvo que decidas guardar el JSON de la cotización tú mismo.

¿Está publicado en PyPI? Sí, como electronics-rfq-agent-cli (pip install electronics-rfq-agent-cli). El pipeline de publicación (compilación, firma de Sigstore, SBOM, carga de editor de confianza) vive en .github/workflows/release.yml y se ejecuta en cada push de etiqueta v*. La ruta de importación de Python (electronics_rfq_agent) y el comando CLI erfa no cambian; solo el nombre del paquete orientado al registro lleva el sufijo -cli, siguiendo la convención de nombres de este mantenedor para herramientas CLI.

Contribuciones

  • Lee CONTRIBUTING.md antes de abrir una PR

  • Los primeros problemas buenos están etiquetados en GitHub

  • Los adaptadores de ERP viven en electronics_rfq_agent/mcp/; cada uno es un archivo autocontenido sin cambios en el núcleo

  • Todas las PR requieren un 80 % de cobertura de pruebas

Discusiones de GitHub: Haz preguntas, comparte ideas Discord: próximamente

Documentación completa: Primeros pasos · Referencia de API · Configuración de ERP: Epicor · SAP · Oracle · Dynamics 365 · Registro de cambios

MIT. Las contribuciones son bienvenidas.

Licencia

MIT. Consulta LICENSE.

Cita este trabajo

Si utilizas Electronics RFQ Agent en investigación, cítalo por favor:

@software{paul2026electronicsrfq,
  author = {Paul, Rudrendu and Nandy, Sourav},
  title = {Electronics RFQ Agent: AI Quoting Agent for Electronics Distributors},
  year = {2026},
  url = {https://github.com/RudrenduPaul/electronics-rfq-agent},
  license = {MIT}
}

Creado por Rudrendu Paul y Sourav Nandy

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
1dResponse time
0dRelease cycle
4Releases (12mo)
Commit activity

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Intelligently generates cost estimates and lead times for manufacturing RFPs by parsing requests, matching against historical quotes, and calculating activity-based costs with confidence scoring and human approval workflows.
  • A
    license
    Not graded
    quality
    D
    maintenance
    Agent-native company intelligence. AI agents search and retrieve structured, verified company context (certifications, capabilities, capacity, lead times) for manufacturing & supply chain via 5 MCP tools.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    This MCP server enables AI agents to understand and analyze electrical schematics from Cadence and Altium for comprehensive design reviews through natural conversations.
    596
    31
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    A FastMCP runtime that lets AI tools search electronic components, prices, and availability across the Distrify distributor network through one connection, federating queries across accessible distributors.
    MIT

View all related MCP servers

Related MCP Connectors

  • Electronic component sourcing, BOM management, and PCB design workflows.

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RudrenduPaul/electronics-rfq-agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server