模型上下文协议演示

一个展示如何使用FastMCP服务器和LangChain集成创建AI应用的演示项目,包括数学运算和天气信息模拟功能。

  • by RMCV-Rajapaksha
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 rmcv-rajapaksha/mcp-server-demo

使用说明

MCP演示

一个展示模型上下文协议(MCP)与FastMCP服务器和LangChain集成的演示项目。

概述

该项目演示了如何使用FastMCP创建和使用MCP(模型上下文协议)服务器,将其与LangChain代理集成,以创建可以使用外部工具的AI应用程序。演示包括两个示例服务器:

  • 数学服务器:提供基本的数学运算(加法、乘法)
  • 天气服务器:模拟任何位置的天气数据检索

特性

  • 🧮 数学运算:使用MCP工具对数字进行加法和乘法运算
  • 🌤️ 天气信息:获取任何位置的模拟天气数据
  • 🤖 AI代理集成:使用LangChain和OpenAI GPT-4与MCP工具交互
  • 🔄 多种运输方式:演示stdio和HTTP传输

项目结构

MCP-Demo/
├── main.py              # Main entry point
├── math_server.py       # MCP server for mathematical operations
├── weather.py           # MCP server for weather information
├── client.py            # Client that integrates MCP servers with LangChain
├── pyproject.toml       # Project configuration and dependencies
├── requirements.txt     # Python dependencies
├── uv.lock             # UV lock file
└── README.md           # This file

需求

  • Python 3.10或更高版本
  • OpenAI API密钥(用于AI代理)

安装

  1. 克隆存储库:

    git clone <repository-url>
    cd MCP-Demo
    
  2. 安装依赖项:

    # Using pip
    pip install -r requirements.txt
    
    # Or using uv (recommended)
    uv sync
    
  3. 设置环境变量: 创建一个 .env 项目根目录中的文件:

    OPENAI_API_KEY=your_openai_api_key_here
    

用法

运行单个服务器

数学服务器(stdio传输)

python math_server.py

天气服务器(HTTP传输)

python weather.py

天气服务器将在 http://localhost:8000 默认情况下。

运行完整演示

  1. 启动天气服务器 (在一个终端中):

    python weather.py
    
  2. 运行客户端 (在另一个终端中):

    python client.py
    

客户将使用AI代理演示数学和天气操作。

MCP服务器

数学服务器(math_server.py)

通过stdio传输提供数学运算:

  • add(a: int, b: int) -> int:将两个数字相加
  • multiply(a: int, b: int) -> int:将两个数字相乘

天气服务器(weather.py)

通过HTTP传输提供模拟天气信息:

  • get_weather(location: str) -> str:返回给定位置的天气数据

客户端集成(client.py)

客户演示如何:

  1. 创建一个 MultiServerMCPClient 具有多个MCP服务器
  2. 配置不同的传输类型(stdio和HTTP)
  3. 将MCP工具与LangChain代理集成
  4. 使用OpenAI的GPT-4模型与工具进行交互

交互示例

演示客户端将执行以下示例交互:

  1. 数学查询:“什么是(3+5)x 12?”

    • 使用数学服务器的 add 和 multiply 工具
    • 预期结果:96
  2. 天气查询“加利福尼亚的天气怎么样?”

    • 使用天气服务器 get_weather 工具
    • 返回模拟天气数据

发展

添加新工具

要向数学服务器添加新工具,请执行以下操作:

@mcp.tool()
def subtract(a: int, b: int) -> int:
    """Subtracts b from a."""
    return a - b

要向天气服务器添加新工具,请执行以下操作:

@mcp.tool()
async def get_forecast(location: str, days: int = 7) -> str:
    """Get weather forecast for multiple days."""
    # Implementation here
    pass

运输类型

  • 标准:直接进程通信(由数学服务器使用)
  • streamable_http:基于HTTP的通信(由天气服务器使用)

依赖项

  • mcp:核心模型上下文协议库
  • langchain-groq:LangChain与Groq的整合
  • langchain-mcp-adapters:LangChain的MCP适配器
  • langgraph:基于图的代理框架
  • langchain-openai:LangChain的OpenAI集成

故障排除

  1. 缺少OpenAI API密钥:确保你的 .env 文件包含有效的OpenAI API密钥
  2. 端口冲突:如果端口8000繁忙,请在中修改端口 weather.py
  3. 导入错误:确保所有依赖项都已安装 pip install -r requirements.txt

贡献

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

许可证

该项目仅用于演示目的。请检查生产使用的各个依赖许可证。

资源