Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
AI quoting agent for electronics distributors. RFQ in, quote out via MCP tools.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"electronics-rfq-agent": {
"command": "uvx",
"args": [
"electronics-rfq-agent-cli",
"erfa",
"mcp"
]
}
}
}ターミナルでこれを実行します
claude mcp add electronics-rfq-agent -- uvx electronics-rfq-agent-cli erfa mcpプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"electronics-rfq-agent": {
"command": "uvx",
"args": [
"electronics-rfq-agent-cli",
"erfa",
"mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"electronics-rfq-agent": {
"type": "stdio",
"command": "uvx",
"args": [
"electronics-rfq-agent-cli",
"erfa",
"mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント RudrenduPaul で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.3.2)がレジストリに届いたのは3 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Zendesk
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Zendesk MCP Pack — tickets, users, organizations via OAuth.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Your sales engineers are spending 2-4 hours turning RFQ documents into quotes. This does it in seconds.
Electronics RFQ Agent is a Python library and CLI that reads RFQ documents (PDF, Excel, Word), looks up every line item against your ERP catalog, and outputs a draft quote. It connects to SAP, Epicor, Oracle, and Microsoft Dynamics through MCP servers, so it works with Claude, GPT-4, or any agent framework that speaks MCP.
pip install electronics-rfq-agent-cli
uv add electronics-rfq-agent-cli
To install from source instead:
git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent pip install -e .
uv sync
Parsing RFQ documents (PDF, Excel, Word) calls the Anthropic API, so set ANTHROPIC_API_KEY before running anything that touches a real document:
export ANTHROPIC_API_KEY="sk-ant-..."
You don't need this key to run erfa audit against an existing quote file, or to explore the CLI with --help. Only document parsing calls out to Claude.
We were working with electronics distributors who had 3-5 sales engineers spending most of their day on quote entry. Every tool we found was either tied to one specific ERP or required a 6-month integration project. We wanted something that worked with what distributors already had, could be self-hosted (quote data is sensitive), and was actually extensible.
The MCP architecture means adding a new ERP is writing one file. The parser handles the document formats distributors actually send: hand-filled PDFs, multi-sheet Excel files, and the occasional scanned table.
No ERP system required to try it out; the mock backend ships with 200 realistic electronics parts. You do need ANTHROPIC_API_KEY set, since parsing the RFQ document is still a real Claude call:
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 applies quantity-based pricing tiers automatically: qty >= 1000 gets 20% off, qty >= 100 gets 10% off, qty >= 10 gets 5% off. List price applies below qty 10. This mirrors real-world volume pricing so benchmarks and integration tests reflect realistic cost curves.
Connect to a real 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 ships two subcommands. Every flag below is pulled straight from erfa --help.
| Command | Arguments | Flags | What it does |
|---|---|---|---|
erfa quote | rfq (path, required) | --mock, --margin (default 0.15), --output/-o | Parses an RFQ file and prints a draft quote. Needs ANTHROPIC_API_KEY; parsing always goes through Claude, --mock only swaps the ERP backend. |
erfa audit | quote_file (path, required) | none | Prints a full audit report (found / substituted / not found, fill rate) for a quote JSON file saved with erfa quote --output. Reads a local file only, no API key needed. |
erfa mcp | none | none | Launches an MCP stdio server exposing quote_rfq, lookup_part, and audit_quote as typed tools, so any MCP-compatible agent (Claude, GPT-4, Gemini) can call them directly without shelling out to the CLI. Point your MCP client config at erfa mcp as the command. |
# Generate a quote from an RFQ file against the mock ERP
export ANTHROPIC_API_KEY="sk-ant-..." erfa quote rfq.xlsx --mock
erfa quote rfq.xlsx --mock --output quote.json
erfa audit quote.json
Audit output example (real output from erfa audit docs/example-quote.json, generated by running the mock ERP's pricing logic against the sample RFQ in 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)
Zero-price parts: If a part exists in the ERP catalog but has a unit price of $0.00, the agent quotes $0 rather than skipping the line, and sets
line.notesto a message flagging the zero price so you catch it before quoting the customer. Checkline.notesfor any found or substituted line before sending a quote out.
The full reference lives in docs/api.md: every QuoteAgent parameter, the shared ERP connector interface, Quote/QuoteLineItem field-by-field, and the exception hierarchy. The exports below are what from electronics_rfq_agent import ... actually gives you, grepped from src/electronics_rfq_agent/__init__.py, not guessed:
| Export | What it is |
|---|---|
QuoteAgent | Orchestrates parsing + ERP lookup + quote assembly. run() (async) and run_sync(). |
EpicorMCP, SAPMCP, OracleMCP, DynamicsMCP | ERP connectors, one per supported system. All implement the same search_parts / get_part / get_price / check_inventory interface. |
MockERP (from electronics_rfq_agent.mcp.mock) | In-memory backend with 200 realistic parts. No credentials, no network. |
Quote, QuoteLineItem, RFQLineItem, ERPPartResult, ERPConfig | Pydantic v2 models for the quote, each line, the parsed RFQ line, raw ERP data, and connector config. |
ERPConnectionError, RFQParseError | The two exceptions QuoteAgent can raise: connection/auth failures and unparseable documents. Per-line ERP failures don't raise; they land in line.notes instead. |
TelemetryCollector, TelemetryEvent | Opt-in local telemetry (telemetry=True on QuoteAgent), counts and timings only, no RFQ content. |
| Electronics RFQ Agent | Manual process | SAP Joule | Generic AI (ChatGPT) | |
|---|---|---|---|---|
| Multi-ERP support | SAP + Epicor + Oracle + Dynamics | N/A | SAP-centric (Joule Studio can reach non-SAP sources via SAP Integration Suite) | No ERP access |
| Quote time (50 lines) | ~15s | 2-4 hours | Not publicly documented | N/A |
| Self-hostable | Yes | N/A | No (SAP BTP cloud service) | No |
| Data stays local | Yes | Yes | No | No |
| Open source | MIT | N/A | No | No |
| Dev mock backend | Yes | N/A | Not publicly documented | N/A |
| MCP compatible | Yes | N/A | Not publicly documented | No |
| ERP | Status | Connection | Docs |
|---|---|---|---|
| Epicor Kinetic | Supported | REST API | Setup |
| SAP ECC / S/4HANA | Beta (manual install) | PyRFC (BAPI) | Setup |
| Oracle Cloud SCM | Supported | REST API | Setup |
| Microsoft Dynamics 365 | Supported | Graph API | Setup |
| Mock backend | Built-in | In-memory | No config needed |
SAP note: pyrfc requires the SAP NetWeaver RFC Library, which is not on PyPI and must be downloaded manually from SAP's support portal (S-user required). See docs/erp-setup/sap.md for step-by-step instructions.
Measured using the in-memory mock backend (200 realistic parts, no ERP system required). Run it yourself:
git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent uv run python benchmarks/run.py
ERP lookup latency (100 individual lookups, mock backend):
| P50 | P99 | Mean |
|---|---|---|
| 0.00025ms | 0.0023ms | 0.00032ms |
Quote assembly time by RFQ size (parser mocked, no Anthropic API call):
| RFQ size | Assembly time |
|---|---|
| 10 lines | 0.004s |
| 25 lines | 0.001s |
| 50 lines | 0.001s |
*These numbers cover ERP lookup and quote assembly only. The RFQ parser is mocked and no Anthropic API call is made. In production, AI document parsing adds 5-15s per document and real ERP lookups add 100-500ms per line (parallelised at up to max_concurrent=10), giving a realistic total of ~15s for a 50-line RFQ. Manual baseline: 2-4 hours.*
Electronics RFQ Agent works with any agent framework that supports MCP:
| Framework | Install | Example |
|---|---|---|
| Claude (built-in) | 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 |
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
Your quote data never leaves your environment.
冒頭だけを表示しています。続きはリポジトリで読めます