MCP协议示例
该项目包括使用Model Context Protocol(MCP)提供天气信息的示例服务器,以及测试这些信息的客户端。 未来将添加多种MCP协议示例。
MCP(模型上下文协议)란?
Model Context Protocol(MCP)是一种开放式协议,用于标准化AI模型与外部数据和工具的交互方式。允许“主机”(如编辑器(VS Code等)或AI应用程序(Claude Desktop等)连接到本地或远程资源(“服务器”)。这使AI模型可以安全地访问各种源,包括本地文件、数据库和Web API。
参考链接
- 官方网站和文档: https://modelcontextprotocol.io/
- GitHub存储库:
MCP基本架构(Basic Architecture)
MCP遵循基于主机(客户端)和服务器之间1:1连接的客户端-服务器体系结构。
- 主机(客户端)
- 启动MCP连接的主体(例如Claude Desktop、VS Code或 weather_client.py). - 接收用户的输入,必要时向服务器请求运行工具或读取资源。 - 浏览并利用服务器提供的功能。
- 服务器
- 提供实际数据或功能的主体(例如: weather_server.py). - 资源:只读数据(文本、图像等)。文件内容或API响应等。 - 工具:可执行函数。还包括外部API调用、计算、数据库查询等具有副作用的操作。 - 提示:预定义的提示模板。允许重复使用复杂的指示。
- Transport(通信方式)
- 工作室:通过标准输入输出(Standard Input/Output)进行通信。主要用于本地进程之间的连接。 - SSE(服务器发送事件):基于HTTP的通信。非常适合远程服务器连接。
公共设置(Prerequisites)
此项目中的所有示例都使用通用虚拟环境和依赖性。请在项目根目录中按照以下步骤设置环境:
- 创建和激活虚拟环境
# 프로젝트 루트에서 실행
python -m venv .venv
.\.venv\Scripts\Activate.ps1- 依赖性安装
# 프로젝트 루트에서 실행
pip install -r requirements.txt______________________________________________________________________
1.天气协议(src/mcp-weather)
使用Open-Meteo API提供和查询天气信息的示例。
文件说明
src/mcp-weather/weather_server.py:MCP服务器实施方案
- 功能(Tools): - get_weather_forecast:基于纬度/经度的天气预报 - get_weather_by_location:基于地名(例如“首尔”)的天气查询 - 特点:支持STDIO和SSE传输方式
src/mcp-weather/weather_client.py:测试客户端
- 连接到服务器,查看并运行工具列表,执行资源读取测试
实施的MCP功能
| 区分 | 功能 | 说明 | 实现方法 |
|---|---|---|---|
| 服务器 | 工具 运行函数(查询天气) @app.list_tools(), @app.call_tool() | ||
| 资源 | 读取数据(状态、天气) | @app.list_resources(), @app.read_resource() | |
| 资源模板 | 动态URI模式 | @app.list_resource_templates() | |
| 运输 | 通信方式 | StdioServerTransport, SseServerTransport | |
| 客户端 | 呼叫工具 | 工具调用Test | session.call_tool() |
| 读取资源 | 资源读取Test | session.read_resource() |
执行方法
- 服务器运行(SSE模式)
# 터미널 1 (가상환경 활성화 상태)
python src/mcp-weather/weather_server.py --sse- 客户端测试
# 터미널 2 (가상환경 활성화 상태)
python src/mcp-weather/weather_client.py______________________________________________________________________
2.销售助理/CRM(src/mcp-sales-crm)
面向销售代表的Mock CRM系统。支持查看客户配置文件、查看最近的活动历史记录和记录会议笔记。
特点
- 本地JSONDB:
src/mcp-sales-crm/data/customers.json使用文件管理数据。 - 通过Resource提供仪表板:以资源的形式实时查看关键客户信息。
实施的MCP功能(协议细节)
| 区分名称说明输入URI | |||
|---|---|---|---|
| 工具 | get_customer_profile | 查看客户概要信息和基础信息 | cust_name_or_id (客户名称/ID) |
get_recent_interactions | 查看最近的会议、电子邮件等活动历史记录 | cust_name_or_id (客户名称/ID) | |
add_meeting_note | 添加新的会议笔记(数据库更新) | cust_id (ID), note (内容), date | |
| 资源 | Sales Dashboard | 高风险客户列表摘要 | sales://dashboard |
执行方法
- 运行服务器 (端口:8001)
python src/mcp-sales-crm/sales_server.py --sse- 客户端测试
python src/mcp-sales-crm/sales_client.py______________________________________________________________________
3.供应链/ERP(src/mcp-supply-chain)
用于库存管理和紧急订购的Mock ERP系统。提供库存确认、替代品搜索和订购功能。
特点
- 业务逻辑:库存不足时搜索替代产品(
find_alternative_product)的逻辑。 - 更改状态:
place_restock_order工具实际上inventory.json更改文件的库存数量。
实施的MCP功能(协议细节)
| 区分 | 名称 | 说明 | 输入(Arguments) |
|---|---|---|---|
| 工具 | check_product_stock | 确认特定商品的库存和位置 | sku_or_name (SKU或商品名称) |
find_alternative_product | 搜索同一类别的替代产品(过滤最小库存) | category (类别), min_stock (最小数量) | |
place_restock_order 商品订购(库存数量增加) sku (目标SKU), quantity (数量) |
执行方法
- 运行服务器 (端口:8002)
python src/mcp-supply-chain/supply_server.py --sse- 客户端测试
python src/mcp-supply-chain/supply_client.py______________________________________________________________________
4.人力资源与政策礼宾(src/mcp-hr-policy)
用于内部法规发现和休假管理的Mock HR系统。同时利用结构化数据(DB)和非结构化数据(法规文档)。
特点
- 混合数据:
- 员工信息 employees.json (结构化) - 公司内部规定 policy.md (非结构化/文本)
- 搜索文档:
search_policy_docs该工具在Markdown文档中搜索关键字并返回相关条款。
实施的MCP功能(协议细节)
| 区分 | 名称 | 说明 | 输入(Arguments) |
|---|---|---|---|
| 工具 | get_employee_balance | 查看员工休假剩余天数 | employee_id (员工ID,例如“emp_001”) |
search_policy_docs | 内部法规搜索(匹配Markdown文档中的关键字) | query (搜索词,例如“假期”) | |
submit_leave_request | 休假申请(剩余天数递减并保存状态) | employee_id, type (类型), days (天数) | |
| 数据 | employees.json | 员工假期余额和申请情况数据(韩文)-- | |
policy.md | 公司内部法规文档(文本、韩文)-- |
执行方法
- 运行服务器 (端口:8003)
python src/mcp-hr-policy/hr_server.py --sse- 客户端测试
python src/mcp-hr-policy/hr_client.py