MCP报价服务器
模型上下文协议(MCP)服务器,用于生成具有价格匹配、交付周期优化和自动报价生成功能的材料报价。
特性
- 材料价格查询:为多个供应商的材料找到有竞争力的定价
- 报价生成:创建包含行项目、定价和交付周期的综合报价
- Markdown导出:生成Markdown格式的专业报价文档
- 电子邮件草稿:为报价交付创建批准就绪的电子邮件草稿
- 交付周期优化:根据最大交付周期要求筛选报价
- 税款计算:支持报价中的税率计算
先决条件
- Python 3.8或更高版本
- pip(Python包安装程序)
安装
- 克隆仓库
git clone https://github.com/jpz129/mcp_quote_server.git
cd mcp_quote_server- 创建虚拟环境
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate- 安装依赖项
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这将:
- 搜索材料价格
- 生成完整的报价
- 创建Markdown引用文档
- 生成电子邮件草稿
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_quoteout_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
}工作流示例
- 定义行项目 有材料查询
- 搜索价格 使用
find_material_prices - 创建报价 包含客户和项目详细信息
- 完整报价 使用
complete_quote最优定价 - 生成文档 使用
render_quote_md - 创建电子邮件草稿 使用
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生成和电子邮件草稿
添加新功能
- 在中定义新的Pydantic模型
src/models/quote_models.py - 以适当的方式实现业务逻辑
src/services/模块 - 从导出新功能
src/services/__init__.py和src/models/__init__.py - 在中创建新的MCP工具
server.py使用@mcp.tool()装饰器 - 使用新的API文档更新此自述文件
- 将测试添加到
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手动部署
- 设置您的项目:
gcloud config set project YOUR_PROJECT_ID- 构建并推送容器:
gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/mcp-quote-server- 部署到云运行:
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- 获取服务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-自动部署脚本
许可证
这个项目是开源的。请检查存储库以了解许可证详细信息。
贡献
- 复刻仓库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
支持
对于问题和疑问,请在GitHub存储库中创建问题。
