electronics-rfq-agent について
electronics-rfq-agentは、電子部品ディストリビューター向けのPythonライブラリとコマンドラインツールです。RFQ文書から価格付きの見積案を作成し、MCP経由で複数のERPに接続して見積を監査できます。
主な機能
- 01PDF、Excel、WordのRFQ解析
- 02ERPの部品・価格・在庫検索
- 03利益率を加えた見積案の作成
- 04見積明細の照合状態の監査
- 05モックERPバックエンドの利用
活用シーン
- 01顧客のRFQから見積案を作成
- 02未照合または代替された部品の確認
- 03実ERPへの接続前に処理を検証
MCP 対応
MCP stdioサーバーとして quote_rfq、lookup_part、audit_quote ツールをMCPクライアントに公開します。また、MCPコネクター経由で対応するERPに接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| mock | boolean | いいえ | |
| margin | number | いいえ | |
| rfq_path | string | はい |
詳細
エレクトロニクス RFQ エージェント
営業エンジニアは、RFQ 文書を見積もりに変換するのに 2~4 時間を費やしています。このツールなら数秒で完了します。
Electronics RFQ Agent は、RFQ 文書(PDF、Excel、Word)を読み込み、すべての明細項目を ERP カタログで検索して、見積もりのドラフトを出力する Python ライブラリおよび CLI です。MCP サーバーを通じて SAP、Epicor、Oracle、Microsoft Dynamics に接続するため、Claude、GPT-4、または MCP に対応するあらゆるエージェントフレームワークで利用できます。

目次
- インストール
- このツールが解決する課題
- クイックスタート
- コマンド
- API リファレンス
- 他の選択肢との違い
- ERP のサポート
- ベンチマーク
- 統合マトリックス
- Docker で試す
- セキュリティ
- FAQ
- コントリビュート
- ライセンス
インストール
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 への対応はファイル 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_rfq、lookup_part、audit_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 の各フィールド、例外の階層を記載しています。以下のエクスポートは推測ではなく、src/electronics_rfq_agent/__init__.py から検索した、実際に from electronics_rfq_agent import ... で利用できるものです。
| エクスポート | 内容 |
|---|---|
QuoteAgent | 解析、ERP 検索、見積もりの組み立てを統括します。run()(非同期)と run_sync() を利用できます。 |
EpicorMCP、SAPMCP、OracleMCP、DynamicsMCP | 対応するシステムごとの ERP コネクターです。すべて同じ 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、RFQParseError | QuoteAgent が発生させる2つの例外です。接続/認証エラーと、解析できないドキュメントを示します。明細ごとの 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/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 検索には 1 行あたり 100~500ms かかります(最大 max_concurrent=10 で並列処理)。そのため、50 行の RFQ の現実的な合計時間は約 15 秒です。手作業の場合の基準時間は 2~4 時間です。
統合マトリックス
Electronics RFQ Agent は、MCP をサポートするあらゆるエージェントフレームワークで動作します:
| フレームワーク | インストール | 例 |
|---|---|---|
| Claude(組み込み) | pip install electronics-rfq-agent-cli | 01-基本見積もり |
| LangGraph | pip install 'electronics-rfq-agent-cli[langgraph]' | 04-LangGraph エージェント |
| OpenAI Agents SDK | pip install electronics-rfq-agent-cli[agents] | 05-OpenAI Agents |
| CrewAI | pip 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 タブにアップロードされます。
- リリース署名: リリースワークフローでは、ビルドした wheel と sdist に 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 のクラウドプラットフォーム(SAP BTP)に組み込まれ、SAP データを中心に構築された、SAP 独自の AI アシスタントスイートです。Electronics RFQ Agent は MIT ライセンスのセルフホスト可能なソフトウェアで、同じ MCP インターフェースを通じて SAP、Epicor、Oracle、Dynamics と連携できます。見積もりデータを環境外に出す必要はなく、特定の ERP ベンダーに縛られることもありません。
CLI ではなくエージェントから呼び出すにはどうすればよいですか?
erfa mcp を実行して、quote_rfq、lookup_part、audit_quote を型付きツールとして公開する MCP stdio サーバーを起動します。MCP 対応クライアント(Claude、GPT-4、Gemini、またはカスタムのエージェントフレームワーク)で、起動コマンドとして erfa mcp を指定すれば、CLI の出力を解析せずに、構造化 JSON を直接入出力してツールを呼び出せます。
解析できるドキュメント形式は何ですか?
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、信頼されたパブリッシャーによるアップロード)は .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 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 が開発
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。