Electronics RFQ Agent
Electronics RFQ Agent
Ваши инженеры по продажам тратят 2–4 часа на превращение документов RFQ в котировки. Этот инструмент делает это за секунды.
Electronics RFQ Agent — это библиотека Python и CLI, которая читает документы RFQ (PDF, Excel, Word), сопоставляет каждую позицию с вашим каталогом ERP и формирует проект котировки. Он подключается к SAP, Epicor, Oracle и Microsoft Dynamics через MCP-серверы, поэтому работает с Claude, GPT-4 или любой агентной средой, поддерживающей MCP.

Содержание
Related MCP server: databid
Установка
pip install electronics-rfq-agent-cli
# or
uv add electronics-rfq-agent-cliЧтобы установить из исходного кода:
git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
pip install -e .
# or, with uv:
uv syncРазбор документов RFQ (PDF, Excel, Word) требует вызова Anthropic API, поэтому установите ANTHROPIC_API_KEY перед запуском любых операций с реальными документами:
export ANTHROPIC_API_KEY="sk-ant-..."Этот ключ не нужен для запуска erfa audit с существующим файлом котировки или для изучения CLI с помощью --help. Только разбор документов обращается к Claude.
Какую проблему это решает
Мы работали с дистрибьюторами электроники, у которых 3–5 инженеров по продажам проводили большую часть дня за вводом котировок. Каждый инструмент, который мы находили, был либо привязан к конкретной ERP, либо требовал шестимесячного проекта по интеграции. Мы хотели решение, которое работает с тем, что уже есть у дистрибьюторов, может быть развернуто на собственном сервере (данные котировок чувствительны) и действительно расширяемо.
Архитектура MCP означает, что добавление новой ERP — это написание одного файла. Парсер обрабатывает те форматы документов, которые дистрибьюторы действительно отправляют: заполненные вручную PDF, многостраничные Excel-файлы и иногда отсканированные таблицы.
Быстрый старт
Для тестирования не требуется ERP-система; мок-бэкенд поставляется с 200 реалистичными позициями электроники. Вам нужно установить ANTHROPIC_API_KEY, так как разбор документа RFQ по-прежнему выполняется через реальный вызов 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 автоматически применяет уровни ценообразования в зависимости от количества: кол-во >= 1000 дает скидку 20%, кол-во >= 100 — 10%, кол-во >= 10 — 5%. Для количества менее 10 применяется цена из прайс-листа. Это отражает реальное оптовое ценообразование, чтобы бенчмарки и интеграционные тесты отражали реалистичные кривые затрат.
Подключение к реальной ERP:
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())Команды
erfa поставляется с двумя подкомандами. Все флаги ниже взяты из erfa --help.
Команда | Аргументы | Флаги | Что делает |
|
|
| Разбирает файл RFQ и выводит проект котировки. Требуется |
|
| нет | Выводит полный отчет аудита (найдено / заменено / не найдено, процент заполнения) для JSON-файла котировки, сохраненного с помощью |
| нет | нет | Запускает MCP stdio-сервер, предоставляющий |
# 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Пример вывода аудита (реальный вывод erfa audit docs/example-quote.json, сгенерированный применением логики ценообразования мок-бэкенда к образцу RFQ из 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)Позиции с нулевой ценой: Если позиция существует в каталоге ERP, но имеет цену за единицу $0.00, агент укажет цену $0, а не пропустит позицию, и установит
line.notesв сообщение, указывающее на нулевую цену, чтобы вы заметили это до отправки котировки клиенту. Проверяйтеline.notesдля любой найденной или замененной позиции перед отправкой котировки.
Справочник по API
Полная документация находится в docs/api.md: все параметры QuoteAgent, общий интерфейс ERP-коннектора, детальное описание полей Quote/QuoteLineItem и иерархия исключений. Экспорты ниже — это то, что на самом деле дает from electronics_rfq_agent import ..., взятое из src/electronics_rfq_agent/__init__.py, а не предположительное:
Экспорт | Что это |
| Оркестрирует разбор + поиск в ERP + сборку котировки. |
| ERP-коннекторы, по одному на каждую поддерживаемую систему. Все реализуют один и тот же интерфейс |
| Внутрипроцессный бэкенд с 200 реалистичными позициями. Без учетных данных и сети. |
| Pydantic v2 модели для котировки, каждой позиции, разобранной строки RFQ, необработанных данных ERP и конфигурации коннектора. |
| Два исключения, которые может вызвать |
| Дополнительная локальная телеметрия ( |
Чем отличается от альтернатив
Electronics RFQ Agent | Ручной процесс | SAP Joule | Универсальный ИИ (ChatGPT) | |
Поддержка нескольких ERP | SAP + Epicor + Oracle + Dynamics | Н/Д | Ориентирован на SAP (Joule Studio может получать доступ к не-SAP источникам через SAP Integration Suite) | Нет доступа к ERP |
Время формирования котировки (50 позиций) | ~15 сек | 2-4 часа | Публично не задокументировано | Н/Д |
Возможность саморазмещения | Да | Н/Д | Нет (облачный сервис SAP BTP) | Нет |
Данные остаются локальными | Да | Да | Нет | Нет |
Открытый исходный код | MIT | Н/Д | Нет | Нет |
Мок-бэкенд для разработки | Да | Н/Д | Публично не задокументировано | Н/Д |
MCP-совместимость | Да | Н/Д | Публично не задокументировано | Нет |
Поддержка ERP
ERP | Статус | Подключение | Документация |
Epicor Kinetic | Поддерживается | REST API | |
SAP ECC / S/4HANA | Бета (ручная установка) | PyRFC (BAPI) | |
Oracle Cloud SCM | Поддерживается | REST API | |
Microsoft Dynamics 365 | Поддерживается | Graph API | |
Мок-бэкенд | Встроенный | In-memory | Конфигурация не требуется |
Примечание по SAP: для pyrfc требуется SAP NetWeaver RFC Library, которой нет на PyPI, и ее необходимо загрузить вручную с портала поддержки SAP (требуется S-пользователь). См. docs/erp-setup/sap.md для пошаговых инструкций.
Бенчмарки
Измерено с использованием внутрипроцессного мок-бэкенда (200 реалистичных позиций, ERP-система не требуется). Запустите сами:
git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
uv run python benchmarks/run.pyЗадержка поиска в ERP (100 отдельных запросов, мок-бэкенд):
P50 | P99 | Среднее |
0.00025мс | 0.0023мс | 0.00032мс |
Время сборки котировки в зависимости от размера RFQ (парсер замокан, вызовов Anthropic API нет):
Размер RFQ | Время сборки |
10 позиций | 0.004с |
25 позиций | 0.001с |
50 позиций | 0.001с |
Эти цифры покрывают только поиск в ERP и сборку котировки. Парсер RFQ замокан, и вызовов Anthropic API не выполняется. В производственной среде ИИ-разбор документов добавляет 5–15 секунд на документ, а реальные ERP-запросы — 100–500 мс на позицию (распараллеливание до max_concurrent=10), что в сумме дает реалистичные ~15 секунд для RFQ из 50 позиций. Базовый ручной процесс: 2–4 часа.
Матрица интеграций
Electronics RFQ Agent работает с любой агентной средой, поддерживающей MCP:
Framework | Install | Example |
Claude (встроенный) |
| |
LangGraph |
| |
OpenAI Agents SDK |
| |
CrewAI |
| n/a |
Попробуйте в 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Ваши данные котировок никогда не покидают вашу среду.
Безопасность
Сканирование уязвимостей: Trivy сканирует каждый запуск CI (уровень серьезности HIGH/CRITICAL, сборка завершается ошибкой при неисправленных находках), результаты загружаются на вкладку GitHub Security.
Подпись релизов: рабочий процесс релиза подписывает собранные wheels и sdists с помощью Sigstore и прикрепляет CycloneDX SBOM к каждому GitHub Release после создания тега версии.
Фиксация зависимостей: Dependabot поддерживает актуальность GitHub Actions и зависимостей Python (еженедельные обновления патчей, ежемесячные обновления Actions).
Раскрытие информации: SECURITY.md. Сообщайте об уязвимостях конфиденциально по электронной почте или через GitHub Security Advisories; подтверждение в течение 48 часов, ответственное раскрытие в течение 90 дней.
FAQ
Что именно делает Electronics RFQ Agent? Он принимает документ RFQ (PDF, Excel или Word) от клиента, извлекает каждую позицию с помощью Claude, ищет каждую деталь в вашем каталоге ERP через коннектор MCP и возвращает черновую котировку с примененной наценкой. Инженер по продажам проверяет и отправляет её вместо того, чтобы создавать с нуля.
Готов ли он к производственному использованию? Он находится в статусе Beta (v0.2.x). Основная библиотека, коннекторы Epicor, Oracle и Dynamics покрыты CI (lint, mypy strict, pytest с порогом покрытия 80%, сканирование Trivy) для Python 3.10–3.12. Поддержка SAP явно помечена как Beta и требует ручного шага установки (библиотека SAP NetWeaver RFC недоступна на PyPI).
Нужна ли мне ERP-система, чтобы попробовать его?
Нет. MockERP поставляется с 200 реалистичными электронными компонентами и применяет ценовые уровни на основе количества, так что вы можете запустить полный цикл «разбор-поиск-котировка» без учетных данных ERP. Вам всё равно понадобится ANTHROPIC_API_KEY, поскольку разбор документов — это реальный вызов Claude. Только erfa audit (чтение уже сохраненного файла котировки) работает вообще без ключа.
Чем это отличается от того, чтобы просто попросить ChatGPT прочитать RFQ? Обычная чат-модель может прочитать документ и даже предположить цены, но у неё нет подключения к вашему фактическому каталогу ERP, складским остаткам или контрактным ценам, поэтому она просто выдумывает цифры. Electronics RFQ Agent ищет каждую позицию в ваших реальных данных каталога и котирует только то, что действительно есть на складе, по фактической себестоимости плюс ваша настроенная наценка.
Чем это отличается от SAP Joule? Joule — это проприетарный ИИ-ассистент SAP, встроенный в облачную платформу SAP (SAP BTP) и ориентированный на данные SAP. Electronics RFQ Agent имеет лицензию MIT, размещается самостоятельно и работает с SAP, Epicor, Oracle и Dynamics через один и тот же интерфейс MCP. Ваши данные котировок никогда не покидают вашу среду, и вы не привязаны к одному вендору ERP.
Как мне вызвать это из агента вместо CLI?
Запустите erfa mcp, чтобы поднять MCP-сервер stdio, предоставляющий quote_rfq, lookup_part и audit_quote как типизированные инструменты. Укажите любого MCP-совместимого клиента (Claude, GPT-4, Gemini или пользовательский агентский фреймворк) на erfa mcp как команду запуска, и он сможет вызывать эти инструменты напрямую со структурированным JSON на входе и выходе, без необходимости разбирать вывод CLI.
Какие форматы документов он разбирает?
PDF (включая отсканированные таблицы, через возможности зрения Claude), Excel (.xlsx/.xls, ищет по всем листам строку заголовка позиций) и Word (.docx, читает все таблицы). Обычные текстовые RFQ тоже работают.
Что происходит с позицией, которой нет в каталоге ERP?
Она помечается как not_found с пояснением причины (а не молча отбрасывается или угадывается), и она исключается из итоговой суммы котировки. Запустите erfa audit на сохранённом JSON котировки, чтобы увидеть, какие именно позиции были найдены, заменены или отсутствуют, и почему.
Могу ли я использовать это в коммерческих целях? Да. Лицензия MIT, поэтому вы можете использовать, модифицировать и распространять его в коммерческих целях без роялти и без обязательства открывать исходный код ваших изменений. Атрибуция требуется только через файл лицензии.
Отправляются ли мои данные RFQ и ценообразования куда-либо помимо Anthropic? Только содержимое документа RFQ отправляется в API Anthropic для разбора. Поиск в ERP идёт напрямую с вашей машины в вашу ERP-систему через настроенный вами коннектор: никакого промежуточного сервиса нет, и ничего не хранится за пределами вашей среды, если вы сами не решите сохранить JSON котировки.
Опубликован ли он на PyPI?
Да, как electronics-rfq-agent-cli (pip install electronics-rfq-agent-cli). Конвейер публикации (сборка, подпись Sigstore, SBOM, загрузка через trusted publisher) находится в .github/workflows/release.yml и запускается при каждом push тега v*. Путь импорта Python (electronics_rfq_agent) и команда CLI (erfa) не изменились; только имя пакета для реестра несёт суффикс -cli, что соответствует соглашению об именовании CLI-инструментов этого мейнтейнера.
Участие в разработке
Прочтите CONTRIBUTING.md перед открытием PR
Хорошие первые задачи помечены в GitHub
Адаптеры ERP находятся в
electronics_rfq_agent/mcp/; каждый представляет собой самодостаточный файл без изменений в ядреВсе PR требуют покрытия тестами 80%
GitHub Discussions: Задавайте вопросы, делитесь идеями Discord: скоро
Полная документация: Начало работы · Справочник API · Настройка ERP: Epicor · SAP · Oracle · Dynamics 365 · Журнал изменений
Лицензия MIT. Вклад приветствуется.
Лицензия
MIT. См. LICENSE.
Цитирование
Если вы используете Electronics RFQ Agent в исследованиях, пожалуйста, цитируйте:
@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}
}Создано Rudrendu Paul и Sourav Nandy
This server cannot be installed
Maintenance
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntelligently 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.
- AlicenseNot gradedqualityDmaintenanceAgent-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
- AlicenseNot gradedqualityAmaintenanceThis MCP server enables AI agents to understand and analyze electrical schematics from Cadence and Altium for comprehensive design reviews through natural conversations.59631Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA 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
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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