模型上下文协议服务

Model Context Protocol (MCP) 是一个开放协议,用于标准化AI模型与外部数据和工具的交互方式,支持多种应用场景如天气查询、CRM、ERP和HR系统。

  • by bmtjpark
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 bmtjpark/mcp-protocol-sample

使用说明

MCP协议示例

该项目包括使用Model Context Protocol(MCP)提供天气信息的示例服务器,以及测试这些信息的客户端。 未来将添加多种MCP协议示例。

MCP(模型上下文协议)란?

Model Context Protocol(MCP)是一种开放式协议,用于标准化AI模型与外部数据和工具的交互方式。允许“主机”(如编辑器(VS Code等)或AI应用程序(Claude Desktop等)连接到本地或远程资源(“服务器”)。这使AI模型可以安全地访问各种源,包括本地文件、数据库和Web API。

参考链接

MCP基本架构(Basic Architecture)

MCP遵循基于主机(客户端)和服务器之间1:1连接的客户端-服务器体系结构。

  1. 主机(客户端)

    • 启动MCP连接的主体(例如Claude Desktop、VS Code或 weather_client.py).
    • 接收用户的输入,必要时向服务器请求运行工具或读取资源。
    • 浏览并利用服务器提供的功能。
  2. 服务器

    • 提供实际数据或功能的主体(例如: weather_server.py).
    • 资源:只读数据(文本、图像等)。文件内容或API响应等。
    • 工具:可执行函数。还包括外部API调用、计算、数据库查询等具有副作用的操作。
    • 提示:预定义的提示模板。允许重复使用复杂的指示。
  3. Transport(通信方式)

    • 工作室:通过标准输入输出(Standard Input/Output)进行通信。主要用于本地进程之间的连接。
    • SSE(服务器发送事件):基于HTTP的通信。非常适合远程服务器连接。

公共设置(Prerequisites)

此项目中的所有示例都使用通用虚拟环境和依赖性。请在项目根目录中按照以下步骤设置环境:

  1. 创建和激活虚拟环境

    # 프로젝트 루트에서 실행
    python -m venv .venv
    .\.venv\Scripts\Activate.ps1
    
  2. 依赖性安装

    # 프로젝트 루트에서 실행
    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()

执行方法

  1. 服务器运行(SSE模式)

    # 터미널 1 (가상환경 활성화 상태)
    python src/mcp-weather/weather_server.py --sse
    
  2. 客户端测试

    # 터미널 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 |

执行方法

  1. 运行服务器 (端口:8001)
    python src/mcp-sales-crm/sales_server.py --sse
    
  2. 客户端测试
    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 (数量)

执行方法

  1. 运行服务器 (端口:8002)
    python src/mcp-supply-chain/supply_server.py --sse
    
  2. 客户端测试
    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 公司内部法规文档(文本、韩文)--

执行方法

  1. 运行服务器 (端口:8003)
    python src/mcp-hr-policy/hr_server.py --sse
    
  2. 客户端测试
    python src/mcp-hr-policy/hr_client.py