报价生成服务器

MCP报价服务器是一款用于生成材料报价的工具,支持价格匹配、交货时间优化和自动报价生成,适用于采购和供应链管理场景。

  • by jpz129
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jpz129/mcp_quote_server

使用说明

MCP报价服务器

模型上下文协议(MCP)服务器,用于生成具有价格匹配、交付周期优化和自动报价生成功能的材料报价。

特性

  • 材料价格查询:为多个供应商的材料找到有竞争力的定价
  • 报价生成:创建包含行项目、定价和交付周期的综合报价
  • Markdown导出:生成Markdown格式的专业报价文档
  • 电子邮件草稿:为报价交付创建批准就绪的电子邮件草稿
  • 交付周期优化:根据最大交付周期要求筛选报价
  • 税款计算:支持报价中的税率计算

先决条件

  • Python 3.8或更高版本
  • pip(Python包安装程序)

安装

  1. 克隆仓库

    git clone https://github.com/jpz129/mcp_quote_server.git
    cd mcp_quote_server
    
  2. 创建虚拟环境

    python -m venv .venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    
  3. 安装依赖项

    pip install -r requirements.txt
    

配置

环境变量(可选)

创建一个 .env 在项目根目录下的文件中自定义默认值:

COMPANY_NAME="Your Company Name"
CLIENT_NAME="Default Client"
CLIENT_EMAIL="client@example.com"
QUOTE_SCOPE="Default project scope"
QUOTE_ZIP="00000"

用法

运行MCP服务器

要运行服务器以与ChatGPT或其他MCP客户端一起使用:

python server.py

服务器将以stdio模式启动,并等待JSON-RPC请求。

局部测试

运行示例脚本以在本地测试功能:

python example_call.py

这将:

  1. 搜索材料价格
  2. 生成完整的报价
  3. 创建Markdown引用文档
  4. 生成电子邮件草稿

api参考

可用工具

find_material_prices(items_json: str, zip: str) -> str

根据行项目和邮政编码搜索材料价格。

参数:

  • items_json:包含行项目数组的JSON字符串 ref, qty, uom,以及 query 字段
  • zip:交货地点的邮政编码

退货: JSON字符串,包含每个行项目的报价参考

complete_quote(quote_json: str, tax_rate: float = 0.0) -> str

生成包含最优定价和总计的完整报价。

参数:

  • quote_json:包含报价详细信息的JSON字符串(客户、公司、范围、项目、zip、lead_time_days_max)
  • tax_rate:税率以十进制表示(例如,0.0825表示8.25%)

退货: 带有完整引号的JSON字符串,包括行项目、总计和基本原理

render_quote_md(completed_quote_json: str, out_dir: str = ".") -> str

生成Markdown引用文档。

参数:

  • completed_quote_json:JSON字符串来自 complete_quote
  • out_dir:Markdown文件的输出目录

退货: JSON字符串,包含生成的Markdown文档的文件路径

email_draft(to: str, subject: str, completed_quote_json: str) -> str

生成电子邮件草稿以供报价审批。

参数:

  • to:收件人电子邮件地址
  • subject:电子邮件主题行
  • completed_quote_json:JSON字符串来自 complete_quote

退货: 包含电子邮件详细信息(收件人、主题、正文)的JSON字符串

数据模型

LineItem

{
  "ref": "L-001",
  "qty": 240,
  "uom": "ea",
  "query": {
    "keyword": "hurricane tie simpson A35"
  }
}

引用

{
  "client": {"name": "Jane Doe", "email": "jane@example.com"},
  "company": {"name": "Acme Builders"},
  "scope": "Small hardware package",
  "items": [...],
  "zip": "95476",
  "lead_time_days_max": 7
}

价格优惠

{
  "source": "Vendor Name",
  "vendor_sku": "SKU123",
  "description": "Product description",
  "unit_price": 12.50,
  "uom": "ea",
  "lead_time_days": 5,
  "fees_delivery": 25.00
}

工作流示例

  1. 定义行项目 有材料查询
  2. 搜索价格 使用 find_material_prices
  3. 创建报价 包含客户和项目详细信息
  4. 完整报价 使用 complete_quote 最优定价
  5. 生成文档 使用 render_quote_md
  6. 创建电子邮件草稿 使用 email_draft

发展

项目结构

mcp_quote_server/
├── server.py              # MCP tools (thin layer) - at root
├── example_call.py        # Local testing script
├── src/
│   ├── models/
│   │   ├── __init__.py
│   │   └── quote_models.py    # Pydantic data models
│   └── services/
│       ├── __init__.py
│       ├── price_service.py   # Price matching logic
│       ├── quote_service.py   # Quote calculation logic
│       └── rendering_service.py  # Markdown & email rendering
├── requirements.txt       # Python dependencies
├── .gitignore            # Git ignore rules
└── README.md             # This file

建筑

代码库遵循与有组织目录的关注点的清晰分离:

  • server.py (根):仅MCP工具定义-围绕服务的精简包装
  • src/models/:纯数据模型(Pydantic)-无业务逻辑
    • quote_models.py:所有与报价相关的数据结构
  • src/services/:按领域组织的业务逻辑
    • price_service.py:价格匹配算法和目录
    • quote_service.py:报价计算和优化
    • rendering_service.py:Markdown生成和电子邮件草稿

添加新功能

  1. 在中定义新的Pydantic模型 src/models/quote_models.py
  2. 以适当的方式实现业务逻辑 src/services/ 模块
  3. 从导出新功能 src/services/__init__.py 和 src/models/__init__.py
  4. 在中创建新的MCP工具 server.py 使用 @mcp.tool() 装饰器
  5. 使用新的API文档更新此自述文件
  6. 将测试添加到 example_call.py

部署

码头工人

使用Docker在本地构建并运行服务器:

# Build the image
docker build -t mcp-quote-server .

# Run the container
docker run -p 8080:8080 -e PORT=8080 mcp-quote-server

当以下情况发生时,服务器将以HTTP模式启动 PORT 环境变量已设置,或者未设置时,本地MCP客户端处于stdio模式。

谷歌云运行

部署到Google Cloud Run以供生产使用:

先决条件

  • 谷歌云SDK(gcloud)已安装
  • 已安装Docker(用于本地测试)
  • 启用计费的Google Cloud项目
  • 已启用云运行API

快速部署

使用提供的部署脚本:

./deploy.sh YOUR_PROJECT_ID REGION

例子:

./deploy.sh my-project-123 us-central1

手动部署

  1. 设置您的项目:

    gcloud config set project YOUR_PROJECT_ID
    
  2. 构建并推送容器:

    gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/mcp-quote-server
    
  3. 部署到云运行:

    gcloud run deploy mcp-quote-server \
      --image gcr.io/YOUR_PROJECT_ID/mcp-quote-server \
      --platform managed \
      --region us-central1 \
      --allow-unauthenticated \
      --memory 512Mi \
      --cpu 1 \
      --port 8080
    
  4. 获取服务URL:

    gcloud run services describe mcp-quote-server \
      --platform managed \
      --region us-central1 \
      --format 'value(status.url)'
    

环境变量

通过Cloud Run控制台或在部署期间进行配置:

  • COMPANY_NAME -报价的默认公司名称
  • CLIENT_NAME -默认客户端名称
  • CLIENT_EMAIL -默认客户端电子邮件
  • QUOTE_SCOPE -默认报价范围
  • QUOTE_ZIP -默认邮政编码

环境变量示例:

gcloud run deploy mcp-quote-server \
  --image gcr.io/YOUR_PROJECT_ID/mcp-quote-server \
  --set-env-vars COMPANY_NAME="Acme Corp",QUOTE_ZIP="94102"

配置文件

  • Dockerfile -容器图像定义
  • .dockerignore -从Docker构建中排除的文件
  • cloud-run.yaml -云运行服务配置(可选)
  • deploy.sh -自动部署脚本

许可证

这个项目是开源的。请检查存储库以了解许可证详细信息。

贡献

  1. 复刻仓库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

支持

对于问题和疑问,请在GitHub存储库中创建问题。