mcpField
E
electronics-rfq-agent

electronics-rfq-agent

本地服务
github.com/RudrenduPaul商业与营销05 周前更新

关于 electronics-rfq-agent

electronics-rfq-agent 是面向电子元器件分销商的 Python 库和命令行工具,可从 RFQ 文档生成带价格的报价草案。它通过 MCP 连接多种 ERP,并提供报价审核与审计能力。

主要功能

  1. 01解析 PDF、Excel 和 Word RFQ
  2. 02查询 ERP 目录、价格与库存
  3. 03生成带利润率的报价草案
  4. 04审计报价行的匹配状态
  5. 05支持模拟 ERP 后端

适用场景

  1. 01将客户 RFQ 转成报价草案
  2. 02检查报价中未匹配或替代的零件
  3. 03在接入真实 ERP 前测试流程

MCP 相关

提供 MCP stdio 服务,向 MCP 客户端开放 quote_rfq、lookup_part 和 audit_quote 工具;也通过 MCP 连接支持的 ERP。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rudrendupaul-electronics-rfq-agent": {
"command": "uvx",
"args": [
"electronics-rfq-agent-cli"
]
}
}
}
启动命令uvx electronics-rfq-agent-cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypielectronics-rfq-agent-cli0.3.2

工具

3

收录的工具列表 · 更新于 3 周前

参数类型必填说明
mockboolean否
marginnumber否
rfq_pathstring是

详细介绍

Electronics RFQ Agent

销售工程师花费 2-4 小时将 RFQ 文档转换为报价。现在只需几秒钟。

Electronics RFQ Agent 是一个 Python 库和 CLI,可读取 RFQ 文档(PDF、Excel、Word),对照 ERP 产品目录查找每个行项目,并输出报价草案。它通过 MCP 服务连接 SAP、Epicor、Oracle 和 Microsoft Dynamics,因此可与 Claude、GPT-4 或任何支持 MCP 的 Agent 框架配合使用。

CI PyPI version Python 3.10+ License: MIT OpenSSF Scorecard


终端录屏,展示 erfa --help 列出报价和审计子命令,随后 erfa audit 针对模拟 ERP 后端中的五行 RFQ 打印完整的供货率报告

目录

安装

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,或通过 --help 了解 CLI,无需此密钥。只有文档解析会调用 Claude。

此项目解决的问题

我们曾与电子产品分销商合作,他们的 3-5 名销售工程师每天大部分时间都在录入报价。我们找到的工具要么绑定到某个特定 ERP,要么需要耗时 6 个月的集成项目。我们希望打造一种能与分销商现有系统配合使用、可自托管(报价数据很敏感)且真正可扩展的工具。

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。

命令参数标志功能
erfa quoterfq(路径,必需)--mock、--margin <float>(默认值为 0.15)、--output/-o <path>解析 RFQ 文件并输出报价草稿。需要 ANTHROPIC_API_KEY;解析始终通过 Claude 进行,--mock 仅替换 ERP 后端。
erfa auditquote_file(路径,必需)无为使用 erfa quote --output 保存的报价 JSON 文件输出完整审计报告(已找到/已替换/未找到、填充率)。仅读取本地文件,无需 API 密钥。
erfa mcp无无启动一个 MCP stdio 服务,将 quote_rfq、lookup_part 和 audit_quote 暴露为类型化工具,以便任何兼容 MCP 的 Agent(Claude、GPT-4、Gemini)都能直接调用,无需通过命令行调用 CLI。将 MCP 客户端配置中的命令设为 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

审计输出示例(erfa audit docs/example-quote.json 的实际输出;该输出是通过针对 tests/fixtures/sample_rfq.txt 中的示例 RFQ 运行模拟 ERP 的定价逻辑生成的):

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,Agent 会按 $0 报价,而不是跳过该行,并将标记零价的消息写入 line.notes,以便你在向客户报价前发现这一情况。发送报价前,请检查所有已找到或已替换行的 line.notes。

API 参考

完整参考文档见 docs/api.md:其中涵盖每个 QuoteAgent 参数、共享的 ERP 连接器接口、Quote/QuoteLineItem 的每个字段,以及异常层级。以下导出内容是实际通过 from electronics_rfq_agent import ... 提供的,摘录自 src/electronics_rfq_agent/__init__.py,并非猜测:

导出项说明
QuoteAgent协调整个解析、ERP 查询和报价组装流程。提供 run()(异步)和 run_sync()。
EpicorMCP、SAPMCP、OracleMCP、DynamicsMCPERP 连接器,每个受支持的系统对应一个。它们都实现相同的 search_parts/get_part/get_price/check_inventory 接口。
MockERP(来自 electronics_rfq_agent.mcp.mock)包含 200 个逼真零件的内存后端。无需凭据,无需联网。
Quote、QuoteLineItem、RFQLineItem、ERPPartResult、ERPConfig分别用于报价、每个报价行、解析后的 RFQ 行、原始 ERP 数据和连接器配置的 Pydantic v2 模型。
ERPConnectionError、RFQParseErrorQuoteAgent 可能引发的两种异常:连接/身份验证失败和无法解析的文档。每行的 ERP 错误不会引发异常,而是写入 line.notes。
TelemetryCollector、TelemetryEvent可选的本地遥测(在 QuoteAgent 上设置 telemetry=True),仅统计次数和耗时,不包含 RFQ 内容。

与其他方案的区别

Electronics RFQ Agent手动流程SAP Joule通用 AI(ChatGPT)
多 ERP 支持SAP + Epicor + Oracle + Dynamics不适用以 SAP 为中心(Joule Studio 可通过 SAP Integration Suite 访问非 SAP 数据源)无 ERP 访问权限
报价耗时(50 行)约 15 秒2–4 小时未公开文档说明不适用
可自托管是不适用否(SAP BTP 云服务)否
数据保留在本地是是否否
开源MIT不适用否否
开发用模拟后端是不适用未公开文档说明不适用
兼容 MCP是不适用未公开文档说明否

ERP 支持

ERP状态连接方式文档
Epicor Kinetic支持REST API设置
SAP ECC / S/4HANABeta(手动安装)PyRFC(BAPI)设置
Oracle Cloud SCM支持REST API设置
Microsoft Dynamics 365支持Graph API设置
Mock backend内置内存中无需配置

**SAP 说明:**pyrfc 需要 SAP NetWeaver RFC Library,该库不在 PyPI 上,必须从 SAP 支持门户手动下载(需要 S-user)。分步说明请参阅 docs/erp-setup/sap.md。

基准测试

使用内存中的 mock backend 测量(200 个真实场景零件,无需 ERP 系统)。你也可以自行运行:

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

ERP 查询延迟(mock backend 上的 100 次单独查询):

P50P99平均值
0.00025ms0.0023ms0.00032ms

按 RFQ 大小统计的报价组装时间(解析器使用模拟版本,未调用 Anthropic API):

RFQ 大小组装时间
10 行0.004s
25 行0.001s
50 行0.001s

这些数据仅涵盖 ERP 查询和报价组装。RFQ 解析器使用模拟版本,未调用 Anthropic API。在生产环境中,AI 文档解析每份文档需要 5-15s,真实 ERP 查询每行需要 100-500ms(并行度最高为 max_concurrent=10),因此 50 行 RFQ 的实际总耗时约为 15s。人工处理的基准耗时:2-4 小时。

集成矩阵

Electronics RFQ Agent 可与任何支持 MCP 的 Agent 框架配合使用:

框架安装示例
Claude(内置)pip install electronics-rfq-agent-cli01-basic-quote
LangGraphpip install 'electronics-rfq-agent-cli[langgraph]'04-langgraph-agent
OpenAI Agents SDKpip install electronics-rfq-agent-cli[agents]05-openai-agents
CrewAIpip install electronics-rfq-agent-cli[crewai]不适用

在 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 选项卡。
  • **发布签名:**发布工作流会使用 Sigstore 为构建的 wheels 和 sdists 签名,并在标记版本后为每个 GitHub Release 附加 CycloneDX SBOM。
  • **依赖锁定:**Dependabot 会使 GitHub Actions 和 Python 依赖保持最新(每周更新补丁版本,每月更新 Actions)。
  • 漏洞披露:SECURITY.md。请通过电子邮件或 GitHub Security Advisories 私下报告漏洞;我们将在 48 小时内确认收到,并在 90 天内负责任地披露。

常见问题

Electronics RFQ Agent 实际上能做什么? 它接收客户的 RFQ 文档(PDF、Excel 或 Word),使用 Claude 提取每个行项目,通过 MCP 连接器在你的 ERP 目录中查询每个零件,并返回一份已计入利润率的报价草稿。销售工程师只需审核并发送,无需从头制作报价。

它已可用于生产环境了吗? 目前处于 Beta 阶段(v0.2.x)。核心库、Epicor、Oracle 和 Dynamics 连接器均通过 CI 检查(lint、严格模式的 mypy、带 80% 覆盖率门槛的 pytest、Trivy 扫描),覆盖 Python 3.10-3.12。SAP 支持明确标记为 Beta,并且需要手动安装步骤(SAP NetWeaver RFC Library 不在 PyPI 上)。

我需要 ERP 系统才能试用吗? 不需要。MockERP 附带 200 种逼真的电子元器件,并会根据数量应用阶梯定价,因此你无需任何 ERP 凭据即可运行完整的解析、查询和报价流程。但你仍然需要 ANTHROPIC_API_KEY,因为文档解析会实际调用 Claude。只有 erfa audit(读取已保存的报价文件)完全不需要密钥。

这与让 ChatGPT 读取 RFQ 有什么不同? 通用聊天模型可以读取文档,甚至猜测价格,但它无法连接到你的实际 ERP 目录、库存或合同价格,因此给出的数字是凭空编造的。Electronics RFQ Agent 会根据你的真实目录数据查询每个行项目,并且只会按照实际成本价加上你配置的利润率,为实际有库存的产品报价。

这与 SAP Joule 有什么不同? Joule 是 SAP 专有的 AI 助手套件,内置于 SAP 云平台(SAP BTP),并以 SAP 数据为中心。Electronics RFQ Agent 采用 MIT 许可证,可自托管,并通过同一个 MCP 接口支持 SAP、Epicor、Oracle 和 Dynamics。你的报价数据无需离开自己的环境,也不会受限于某一家 ERP 供应商。

如何通过 Agent 而非 CLI 调用它? 运行 erfa mcp,即可启动一个 MCP stdio 服务,将 quote_rfq、lookup_part 和 audit_quote 作为类型化工具公开。将任何兼容 MCP 的客户端(Claude、GPT-4、Gemini 或自定义 Agent 框架)的启动命令设为 erfa mcp,它就能直接通过结构化 JSON 输入和输出调用这些工具,无需解析 CLI 输出。

它能解析哪些文档格式? PDF(包括通过 Claude 视觉能力处理的扫描表格)、Excel(.xlsx/.xls,会搜索每个工作表以查找行项目标题行)和 Word(.docx,会读取所有表格)。纯文本 RFQ 也可以处理。

ERP 目录中没有某个行项目时会怎样? 该项目会标记为 not_found,并附上说明原因的备注(而不是被悄悄丢弃或猜测处理),且不会计入报价总额。对已保存的报价 JSON 运行 erfa audit,即可查看哪些项目已找到、已替换或缺失,以及具体原因。

我可以将它用于商业用途吗? 可以。它采用 MIT 许可证,因此你可以使用、修改并用于商业发布,无需支付版税,也不必将你的修改开源。只需通过许可证文件注明出处。

我的 RFQ 和定价数据会发送到 Anthropic 以外的地方吗? 只有 RFQ 文档内容会发送到 Anthropic API 进行解析。ERP 查询会通过你配置的连接器,直接从你的机器发送到 ERP 系统:没有中间服务,除非你选择自行保存报价 JSON,否则任何数据都不会存储在你自己的环境之外。

它已发布到 PyPI 吗? 是的,包名为 electronics-rfq-agent-cli(pip install electronics-rfq-agent-cli)。发布流水线(构建、Sigstore 签名、SBOM、可信发布方上传)位于 .github/workflows/release.yml,并会在每次推送 v* 标签时运行。Python 导入路径(electronics_rfq_agent)和 erfa CLI 命令保持不变;只有面向软件包仓库的包名带有 -cli 后缀,符合该维护者对 CLI 工具的命名惯例。

贡献

  • 提交 PR 前,请阅读 CONTRIBUTING.md
  • GitHub 上已为适合新手的问题添加标签
  • ERP 适配器位于 electronics_rfq_agent/mcp/;每个文件都是独立的,无需修改核心代码
  • 所有 PR 的测试覆盖率都必须达到 80%

GitHub 讨论区:提问、分享想法 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 构建

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。