Skip to main content
Glama
RudrenduPaul

Electronics RFQ Agent

Electronics RFQ Agent

あなたの営業エンジニアは、RFQ文書を見積書に変換するのに2〜4時間費やしています。これを数秒で実現します。

Electronics RFQ Agentは、RFQ文書(PDF、Excel、Word)を読み取り、各ラインアイテムをERPカタログと照合し、ドラフト見積書を出力するPythonライブラリおよびCLIです。MCPサーバーを通じてSAP、Epicor、Oracle、Microsoft Dynamicsに接続するため、Claude、GPT-4、またはMCPに対応したあらゆるエージェントフレームワークで動作します。

CI PyPI version Python 3.10+ License: MIT OpenSSF Scorecard


erfa --helpがquoteおよびauditサブコマンドを一覧表示し、その後erfa auditがモックERPバックエンドに対する5ラインのRFQの完全な充足率レポートを出力する様子を示すターミナル録画

目次

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を実行する場合や、--helpでCLIを調べる場合には、このキーは必要ありません。ドキュメント解析のみがClaudeを呼び出します。

このツールが解決する問題

私たちは、3〜5人の営業エンジニアが1日の大半を見積もり入力に費やしているエレクトロニクス販売代理店と仕事をしていました。見つけたツールはどれも、特定のERPに紐づいているか、6ヶ月の統合プロジェクトが必要でした。私たちが求めていたのは、販売代理店がすでに持っているものと連携でき、セルフホストが可能で(見積もりデータは機密性が高い)、実際に拡張可能なものでした。

MCPアーキテクチャにより、新しいERPの追加は1つのファイルを作成するだけです。パーサーは、販売代理店が実際に送ってくる文書形式(手書きのPDF、複数シートのExcelファイル、時折あるスキャンされた表)を処理します。

クイックスタート

試すのにERPシステムは不要です。モックバックエンドには200個の現実的な電子部品が同梱されています。RFQ文書の解析は依然として実際のClaude呼び出しであるため、ANTHROPIC_API_KEYの設定が必要です:

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には2つのサブコマンドが含まれています。以下のすべてのフラグはerfa --helpから直接取得したものです。

コマンド

引数

フラグ

説明

erfa quote

rfq(パス、必須)

--mock, --margin <float>(デフォルト 0.15), --output/-o <path>

RFQファイルを解析し、ドラフト見積書を出力します。ANTHROPIC_API_KEYが必要です。解析は常にClaudeを経由し、--mockはERPバックエンドを切り替えるだけです。

erfa audit

quote_file(パス、必須)

なし

erfa quote --outputで保存された見積書JSONファイルの完全な監査レポート(検出 / 代替 / 未検出、充足率)を出力します。ローカルファイルのみを読み取り、APIキーは不要です。

erfa mcp

なし

なし

quote_rfqlookup_partaudit_quoteを型付きツールとして公開するMCP stdioサーバーを起動します。これにより、MCP互換のエージェント(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の場合、エージェントはラインをスキップせずに$0で見積もり、顧客に見積もりを出す前に気づけるよう、ゼロ価格を警告するメッセージをline.notesに設定します。見積書を送信する前に、検出または代替されたすべてのラインのline.notesを確認してください。

APIリファレンス

完全なリファレンスはdocs/api.mdにあります: QuoteAgentのすべてのパラメータ、共有ERPコネクタインターフェース、Quote/QuoteLineItemのフィールドごとの説明、例外階層。以下のエクスポートは、from electronics_rfq_agent import ...が実際に提供するもので、src/electronics_rfq_agent/__init__.pyからgrepしたものであり、推測ではありません:

エクスポート

説明

QuoteAgent

解析 + ERPルックアップ + 見積書組み立てを統括します。run()(非同期)とrun_sync()

EpicorMCP, SAPMCP, OracleMCP, DynamicsMCP

サポートされているシステムごとのERPコネクタ。すべて同じsearch_parts / get_part / get_price / check_inventoryインターフェースを実装しています。

MockERP (from electronics_rfq_agent.mcp.mock)

200個の現実的な部品を備えたインメモリバックエンド。認証情報もネットワークも不要です。

Quote, QuoteLineItem, RFQLineItem, ERPPartResult, ERPConfig

見積書、各ライン、解析されたRFQライン、生のERPデータ、コネクタ設定のためのPydantic v2モデル。

ERPConnectionError, RFQParseError

QuoteAgentが発生させうる2つの例外: 接続/認証の失敗と解析不能な文書。ラインごとのERP失敗は例外を発生させず、代わりにline.notesに記録されます。

TelemetryCollector, TelemetryEvent

オプトインのローカルテレメトリ(QuoteAgenttelemetry=True)。カウントとタイミングのみで、RFQコンテンツは含まれません。

代替手段との違い

Electronics RFQ Agent

手動プロセス

SAP Joule

汎用AI(ChatGPT)

マルチERPサポート

SAP + Epicor + Oracle + Dynamics

N/A

SAP中心(Joule StudioはSAP Integration Suite経由で非SAPソースに到達可能)

ERPアクセスなし

見積時間(50ライン)

~15s

2〜4時間

公開文書なし

N/A

セルフホスト可能

はい

N/A

いいえ(SAP BTPクラウドサービス)

いいえ

データはローカルに保持

はい

はい

いいえ

いいえ

オープンソース

MIT

N/A

いいえ

いいえ

開発用モックバックエンド

はい

N/A

公開文書なし

N/A

MCP互換

はい

N/A

公開文書なし

いいえ

ERPサポート

ERP

ステータス

接続方法

ドキュメント

Epicor Kinetic

サポート対象

REST API

セットアップ

SAP ECC / S/4HANA

ベータ(手動インストール)

PyRFC (BAPI)

セットアップ

Oracle Cloud SCM

サポート対象

REST API

セットアップ

Microsoft Dynamics 365

サポート対象

Graph API

セットアップ

モックバックエンド

組み込み

インメモリ

設定不要

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.00025ms

0.0023ms

0.00032ms

RFQサイズ別の見積書組み立て時間(パーサーはモック、Anthropic API呼び出しなし):

RFQサイズ

組み立て時間

10ライン

0.004s

25ライン

0.001s

50ライン

0.001s

これらの数値はERPルックアップと見積書組み立てのみを対象としています。RFQパーサーはモックされており、Anthropic API呼び出しは行われません。本番環境では、AIドキュメント解析が文書あたり5〜15秒、実際のERPルックアップがラインあたり100〜500ミリ秒(最大max_concurrent=10で並列化)追加され、50ラインのRFQでは現実的に合計約15秒になります。手動のベースライン: 2〜4時間。

統合マトリックス

Electronics RFQ Agentは、MCPをサポートするあらゆるエージェントフレームワークで動作します:

フレームワーク

インストール

Claude(組み込み)

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

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で署名し、各GitHub ReleaseにCycloneDX SBOMを添付します。

  • 依存関係の固定: DependabotはGitHub ActionsとPythonの依存関係を最新に保ちます(毎週のパッチ更新、毎月のActions更新)。

  • 開示: SECURITY.md。脆弱性はメールまたはGitHub Security Advisoriesを通じて非公開で報告してください。48時間以内の確認応答、90日間の責任ある開示。

FAQ

Electronics RFQ Agentは実際に何をするのですか? 顧客からRFQ文書(PDF、Excel、またはWord)を受け取り、Claudeですべてのラインアイテムを抽出し、MCPコネクタ経由で各部品をERPカタログと照合し、マージンを適用した価格付きのドラフト見積を返します。営業エンジニアがゼロから作成する代わりに、それをレビューして送信します。

本番環境で使用できますか? ベータ版(v0.2.x)です。コアライブラリ、Epicor、Oracle、Dynamicsコネクタは、Python 3.10〜3.12でCI(lint、mypy strict、80%カバレッジゲート付きpytest、Trivyスキャン)の対象です。SAPサポートは明示的にベータ版とされており、手動インストール手順が必要です(SAP NetWeaver RFC LibraryはPyPIにありません)。

試すのにERPシステムは必要ですか? いいえ。MockERPには200個の現実的な電子部品が同梱されており、数量ベースの価格ティアが適用されるため、ERPの認証情報なしで解析・照合・見積の全フローを実行できます。文書解析は実際のClaude呼び出しであるため、ANTHROPIC_API_KEYは引き続き必要です。キーがまったくなくても動作するのは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ベンダーに縛られることもありません。

CLIではなくエージェントからこれを呼び出すにはどうすればよいですか? erfa mcpを実行して、quote_rfqlookup_partaudit_quoteを型付きツールとして公開するMCP stdioサーバーを起動します。MCP互換の任意のクライアント(Claude、GPT-4、Gemini、またはカスタムエージェントフレームワーク)を起動コマンドとしてerfa mcpに指定すると、構造化JSONを入出力としてそれらのツールを直接呼び出すことができ、解析するCLI出力はありません。

どの文書形式を解析できますか? PDF(Claudeのビジョン機能によるスキャンされた表を含む)、Excel(.xlsx/.xls、すべてのワークシートからラインアイテムのヘッダー行を検索)、Word(.docx、すべての表を読み取る)です。プレーンテキストのRFQも機能します。

ERPカタログにないラインアイテムはどうなりますか? 理由を説明するメモとともにnot_foundとマークされ(黙って破棄されたり推測されたりはしません)、見積合計から除外されます。保存された見積JSONに対してerfa auditを実行すると、どの行が見つかったか、置換されたか、欠落しているか、その理由を正確に確認できます。

商用利用できますか? はい。MITライセンスなので、ロイヤリティなしで商用利用、修正、配布が可能であり、変更をオープンソースにする義務もありません。ライセンスファイルによる帰属表示のみが必要です。

RFQと価格データはAnthropic以外に送信されますか? 解析のためにAnthropic APIに送信されるのはRFQ文書のコンテンツのみです。ERPルックアップは、設定したコネクタを介してマシンからERPシステムへ直接送信されます。中間サービスはなく、自分で見積JSONを永続化することを選択しない限り、環境外に保存されるものはありません。

これはPyPIに公開されていますか? はい、electronics-rfq-agent-cliとして公開されています(pip install electronics-rfq-agent-cli)。公開パイプライン(ビルド、Sigstore署名、SBOM、trusted-publisherアップロード)は.github/workflows/release.ymlにあり、v*タグのプッシュのたびに実行されます。Pythonインポートパス(electronics_rfq_agent)とerfa CLIコマンドは変更されていません。レジストリ向けのパッケージ名のみが-cli接尾辞を持ち、このメンテナのCLIツールの命名規則に一致しています。

コントリビューション

  • PRを開く前にCONTRIBUTING.mdをお読みください

  • Good first issueはGitHubでラベル付けされています

  • ERPアダプタはelectronics_rfq_agent/mcp/にあります。各アダapterは自己完結型のファイルであり、コアへの変更は不要です

  • すべての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によって構築されました

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