Skip to main content
Glama
r-long

MCP Quoting System

by r-long

MCP Quoting System

An MCP (Model Context Protocol) based intelligent quoting system that compares incoming RFPs against historical quotes to generate accurate cost estimates and lead times.

🚀 Quick Start (Windows)

New to the system? Just double-click START.bat and choose option [1] for automatic setup!

See these guides:

Available Batch Files

  • START.bat - Main interactive launcher (recommended) ⭐

  • setup.bat - First-time installation wizard

  • start-dev.bat - Start development server

  • start-prod.bat - Start production server

  • quick-test.bat - Automated testing

  • stop.bat - Stop the server

  • See BATCH-FILES-README.md for complete list


Features

  • RFP Parsing: Automatically extracts material, processes, quantities, tolerances, and other key information from text-based RFPs

  • Historical Matching: Compares new requests against past quotes using intelligent similarity scoring

  • Cost Estimation: Activity-based costing with material, processing, labor, tooling, and overhead calculations

  • Lead Time Prediction: Estimates delivery time based on quantity, processes, and historical data

  • Confidence Scoring: Provides low/medium/high confidence ratings based on data completeness and match quality

  • Human-in-Loop: Requires approval before sending quotes, with full audit trails

  • Idempotency: Prevents duplicate processing of the same RFP

Architecture

The system is built as an MCP server with the following capabilities:

MCP Functions (Capabilities)

  1. ingestRfp - Parse RFP text and extract structured information

  2. findSimilarQuotes - Search historical database for similar past quotes

  3. estimateCostLeadTime - Calculate cost and lead time estimates

  4. generateQuote - Create formatted quote documents

  5. approveQuote - Mark quotes as approved (human-in-loop)

  6. sendQuote - Send quotes via email (dry-run enabled)

Coordinator

  • evaluateRfpAndDraftQuote - Orchestrates all functions to produce a complete quote evaluation

Installation

npm install

Configuration

  1. Copy .env.example to .env:

cp .env.example .env
  1. Edit .env with your settings:

PORT=3789 SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=your-email@example.com SMTP_PASS=your-app-password

Usage

Start the Server

Development mode:

npm run dev

Production mode:

npm run build npm start

Load Sample Historical Data

Copy sample quotes to the main database:

cp data/sample-quotes.json data/quotes.json

Example API Calls

1. Full Quote Evaluation (Coordinator)

curl -X POST http://localhost:3789/mcp/invoke/evaluateRfpAndDraftQuote \ -H "Content-Type: application/json" \ -d '{ "rfp": { "rawText": "We need 200 pcs of a 6061-T6 aluminum widget, CNC machined, anodize finish, tolerance +/-0.005, delivery by 2025-02-28. Contact: buyer@acme.com", "qty": 200, "contactEmail": "buyer@acme.com", "customerName": "Acme Corp" } }'

2. Get Formatted Review

curl -X POST http://localhost:3789/mcp/utility/formatReview \ -H "Content-Type: application/json" \ -d '{ "result": {<evaluation_result_from_previous_call>} }'

3. View Historical Quotes

curl http://localhost:3789/mcp/utility/historicalQuotes

4. Add Historical Quote

curl -X POST http://localhost:3789/mcp/utility/addHistoricalQuote \ -H "Content-Type: application/json" \ -d '{ "id": "Q-NEW", "quoteDate": "2024-11-12T10:00:00Z", "customerName": "New Customer", "normalized": { "material": "steel", "processes": ["laser", "bend"], "qtyRange": [51, 100], "tolerances": "+/-0.010" }, "costPerUnit": 25.00, "totalCost": 1875.00, "leadDays": 14, "approved": true }'

Similarity Matching

The system uses rule-based similarity scoring with weighted components:

  • Material (35%): Exact, family, or partial matches

  • Processes (30%): Overlap of required processes

  • Quantity (20%): Same range or adjacent ranges

  • Tolerances (10%): Matching precision requirements

  • Finish (5%): Surface treatment matching

Confidence Thresholds

  • High confidence (≥85%): Very similar to past work, reliable estimate

  • Medium confidence (70-85%): Similar family, adjust with caution

  • Low confidence (<70%): New type of work, requires engineer review

Cost Estimation

Activity-based costing model:

Total Cost = Material + Processing + Labor + Tooling + Overhead + Margin

Components

  • Material Cost: Unit price × quantity (from material price list)

  • Processing Cost: Sum of process times × machine hour rate

  • Labor Cost: Operator time × labor rate

  • Tooling Amortization: Setup cost / quantity

  • Overhead: 15% of direct costs

  • Margin: 20% profit margin

  • Contingency: 10% for low-confidence quotes

Lead Time Calculation

Lead Time = Procurement + Setup + Run Time + QA + Shipping

Adjustments based on:

  • Quantity (higher volume = longer lead time)

  • Process complexity (heat treat, plating add time)

  • Historical actual lead times from similar quotes

Data Storage

Currently uses JSON files in the data/ directory:

  • quotes.json - Historical quotes database

  • evaluations.json - Recent RFP evaluations (last 100)

For production, consider migrating to:

  • PostgreSQL for relational data

  • Vector database (Pinecone, Weaviate) for semantic similarity search

  • Redis for caching and idempotency

Safety Features

  1. Human-in-Loop: All quotes default to "draft" status

  2. Dry-Run Email: Email sending requires explicit enablement

  3. Idempotency: Duplicate RFPs return cached results

  4. Audit Trails: All evaluations logged with timestamps

  5. Confidence Scoring: Flags uncertain estimates for review

Extending the System

Add New Materials

Edit src/config.ts:

materials: { 'titanium-grade-5': 18.0, // Add more... }

Add New Processes

Edit src/config.ts:

processes: { 'EDM': 40, // minutes per part 'Grinding': 25, // Add more... }

Replace the rule-based matcher in src/matcher.ts with:

  1. OpenAI embeddings for RFP text

  2. Vector DB (Pinecone, Weaviate, FAISS)

  3. Cosine similarity search

  4. Metadata filtering (material, process)

Add Database Backend

Replace src/storage.ts with database adapters:

  • Use Prisma or TypeORM for PostgreSQL

  • Implement connection pooling

  • Add transactions for data integrity

Testing

Create test RFPs:

// Test 1: High similarity match { "rawText": "Need 250 units of 6061-T6 aluminum, CNC milled and anodized, +/-0.005 tolerance", "qty": 250 } // Test 2: New material { "rawText": "100 titanium brackets, laser cut and polished", "qty": 100 } // Test 3: Low detail (low confidence) { "rawText": "We need some metal parts", "qty": 50 }

API Documentation

See full API documentation in the console output when starting the server.

Troubleshooting

No historical matches found

  • Check that data/quotes.json exists and has content

  • Verify material names match (case-insensitive)

  • Lower similarity threshold in src/config.ts

Costs seem incorrect

  • Review material prices in src/config.ts

  • Adjust machine hour rate and labor rate

  • Check overhead and margin percentages

Lead times too short/long

  • Adjust defaultLeadDays in config

  • Review process time estimates

  • Check quantity-based scaling logic

Future Enhancements

  1. ML-based similarity: Train model on historical quote-to-win patterns

  2. Drawing analysis: Extract features from CAD/PDF drawings

  3. Supplier integration: Real-time material lead times from vendors

  4. CRM integration: Auto-populate customer info

  5. Dashboard UI: React frontend for engineers to review/approve

  6. Analytics: Win/loss tracking, pricing optimization

  7. Multi-currency: International quote support

  8. Revision tracking: Quote version history

License

MIT

Support

For issues or questions, please contact your system administrator.

-
security - not tested
F
license - not found
-
quality - not tested

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/r-long/mcp-quoting-system'

If you have feedback or need assistance with the MCP directory API, please join our Discord server