MCP协议实战:手把手教你搭建商业合同解析Agent
摘要:用MCP协议搭个Agent,自动啃下商业合同硬骨头想用AI自动化处理那些格式杂乱、条款冗长的商业合同?手动复制粘贴公司名、地址、条款到Excel的苦日子该结束了。今天我们就用一个真实的MSC BELGIUM条款片段,手把手教你用MCP协议搭一个能自动解析、提取、验证合同关键信息的智能体。一、痛点:合同里的“脏数据”怎么洗?看看这段标准条款:MSC BELGIUM MEANS MSC BELG...

用MCP协议搭个Agent,自动啃下商业合同硬骨头
想用AI自动化处理那些格式杂乱、条款冗长的商业合同?手动复制粘贴公司名、地址、条款到Excel的苦日子该结束了。今天我们就用一个真实的MSC BELGIUM条款片段,手把手教你用MCP协议搭一个能自动解析、提取、验证合同关键信息的智能体。
一、痛点:合同里的“脏数据”怎么洗?
看看这段标准条款:
MSC BELGIUM MEANS MSC BELGIUM NV, NOORDERLAAN 127A, 2030 ANTWERP, BELGIUM, INCLUDING ALL ITS BRANCH OFFICES IN BELGIUM.
人工提取很简单:公司名、地址、国家。但当你面对上百份格式各异的合同(有的地址在前,有的用“即”代替“MEANS”,有的分支机构写成“及其所有分公司”),手动处理就崩溃了。
MCP协议的价值:它让AI模型能安全、结构化地调用外部工具。我们的思路是:让Agent读取合同文本 → 调用“条款解析插件”提取实体 → 调用“地址验证API”标准化数据 → 输出干净JSON。
二、实战:开发一个合同解析MCP Server
1. 插件设计思路
我们需要一个MCP Server,提供两个核心工具:
extract_contract_entities: 接收文本,返回结构化实体validate_address: 调用外部API验证地址有效性
2. 代码实现(Python示例)
# contract_parser_server.py
from mcp.server import Server
from mcp.types import Tool, TextContent
import json
import re
server = Server("contract-parser")
@server.tool("extract_contract_entities")
async def extract_entities(text: str) -> TextContent:
"""从合同文本提取公司名、地址、分支机构"""
# 简单正则匹配(实际项目用NLP模型)
company_pattern = r"([\w\s]+(?:NV|SA|LLC|Ltd)\.?)"
address_pattern = r"(\d+\s+[\w\s]+,\s*\d{4}\s+[\w\s]+,\s*[\w\s]+)"
company = re.search(company_pattern, text)
address = re.search(address_pattern, text)
# 检测分支机构关键词
has_branches = "branch" in text.lower() or "分公司" in text
result = {
"company_name": company.group(1).strip() if company else None,
"address": address.group(1).strip() if address else None,
"has_branches": has_branches,
"raw_text": text
}
return TextContent(type="text", text=json.dumps(result, ensure_ascii=False))
@server.tool("validate_address")
async def validate_address(address: str) -> TextContent:
"""调用地址验证API(示例用模拟数据)"""
# 实际项目调用Google Maps/高德API
# 这里模拟验证逻辑
if "ANTWERP" in address.upper():
validated = {
"original": address,
"standardized": "Noorderlaan 127A, 2030 Antwerpen, Belgium",
"coordinates": {"lat": 51.2601, "lng": 4.4026},
"is_valid": True
}
else:
validated = {"original": address, "is_valid": False, "error": "地址未识别"}
return TextContent(type="text", text=json.dumps(validated, ensure_ascii=False))
if __name__ == "__main__":
server.run()3. 部署步骤
- 安装依赖:
pip install mcp-server - 启动Server:
python contract_parser_server.py 在Claude/龙虾客户端配置:
{ "mcpServers": { "contract-parser": { "command": "python", "args": ["contract_parser_server.py"] } } }

三、工具集成:让Agent自己“查户口”
光提取不够,关键要验证。我们让Agent工作流变成:
- 输入:用户粘贴合同片段
Agent调用:
- 先调
extract_contract_entities提取原始数据 - 再调
validate_address验证地址 - 最后调用公司数据库API(如OpenCorporates)查询公司状态
- 先调
- 输出:完整的结构化数据包
集成公司查询的代码扩展:
# 在Server中添加新工具
@server.tool("query_company_database")
async def query_company(company_name: str, country: str) -> TextContent:
"""查询公司注册信息"""
# 模拟API调用(实际用requests请求官方商业登记API)
mock_response = {
"company": company_name,
"status": "Active",
"registration_number": "BE0123456789",
"registered_address": "NOORDERLAAN 127A, 2030 ANTWERP",
"last_updated": "2024-11-19"
}
return TextContent(type="text", text=json.dumps(mock_response))四、赚钱场景:这玩意怎么变现?
1. 尽职调查自动化(单客户年费5-20万)
- 痛点:律所/投行处理并购案时,需人工核对几百份合同的主体信息
- 方案:部署合同解析Agent,自动提取所有关联实体并交叉验证
- 案例:某深圳跨境并购团队用类似工具,将3天的人工核对缩短到2小时,错误率从15%降至1%
2. 物流信息智能管理(SaaS模式,每月500-3000/用户)
- 场景:货代公司每天处理上百份提单、运输合同
- 功能:自动提取发货人、收货人、港口信息,同步到TMS系统
- 数据:上海某货代公司试用后,单证处理效率提升40%,每月节省1.5个人力成本
3. 合同模板标准化服务(项目制,单次1-5万)
- 需求:企业法务部需要将历史合同数据化
- 交付:用MCP Agent批量解析,输出标准化JSON,导入合同管理系统
- 复制路径:找到有大量PDF合同的中大型企业,提供“AI合同数字化”解决方案
五、下一步行动清单
技术验证(今天就能做):
- 复制上面的代码,本地跑通MCP Server
- 用MSC BELGIUM文本测试,调整正则表达式
场景选择(本周决定):
- 选一个你熟悉的行业(货代/律所/贸易公司)
- 找3个真实用户聊聊他们的合同处理痛点
MVP开发(两周内):
- 增加PDF解析功能(用PyPDF2)
- 接入一个免费地址验证API(如OpenStreetMap)
- 打包成可演示的Agent工作流
商业化测试(一个月内):
- 在目标行业社群发案例文章
- 提供免费试用:解析10份合同换用户反馈
- 定价测试:基础版999/月,企业定制面议
关键点:别追求完美解析率。先解决80%的标准化问题,剩下20%边缘案例留给人工复核——这才是自动化落地的真实路径。
附:快速测试命令
# 启动你的第一个合同解析Agent
git clone https://github.com/your-repo/contract-mcp
cd contract-mcp
pip install -r requirements.txt
python contract_parser_server.py
# 然后在Claude中输入:“请解析这份合同:MSC BELGIUM MEANS...”