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.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 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는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 9일 점검
레지스트리 이름이 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, Show HN Launches — buy per-query in-session (showhnwatch)
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도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.
Show HN: indie launches & side projects. $0.01/query. Be born in one call — free testnet funds.
제작자의 저장소에서 쓰인 그대로 가져왔어요. 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.
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요