当前位置: 首页 > news >正文

LangGraph MCP智能体开发

文章目录

  • 说明
  • LangGraph与MCP技术概述
    • LangGraph接入外部工具技术实现方法
      • LangChain自定义外部工具函数
      • Langchain内置工具实现
      • 遵循MCP协议接入外部工具
    • MCP核心技术概念
      • MCP CS架构模式
      • MCP离线、在线运行模式
      • 离线MCP工具托管平台
      • MCP在线托管服务
  • LangGraph技术概述
    • LangGraph
    • LangGraph三层API架构
    • LangGraph搭建MCP服务端
    • LangGraph搭建MCP客户端
      • 创建MCP配置文件
      • 修改.env配置文件和提示词模板
      • 创建client.py主函数文件
      • 运行和测试
  • LangGraph接入HTTP MCP智能体
      • **MCP 热门导航网站**

说明

  • 本文学习赋范社区公开课程,仅供学习和交流使用,最终著作权属于九天老师及其团队!

LangGraph与MCP技术概述

LangGraph接入外部工具技术实现方法

LangChain自定义外部工具函数

  • 接入外部函数工具在智能体开发中是至关重要的一环,在LangChain&LangGraph技术生态中,可以通过@tool装饰符来定义外部函数。
from langchain_core.tools import tool
from pydantic import BaseModel, Field
import os
import requests
import jsonclass WeatherQuery(BaseModel):loc: str = Field(description="The location name of the city")@tool(args_schema=WeatherQuery)
def get_weather(loc):"""查询即时天气函数:param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名,注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';:return: OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息"""# Step 1.构建请求url = "https://api.openweathermap.org/data/2.5/weather"# Step 2.设置查询参数params = {"q": loc,"appid": os.getenv("OPENWEATHER_API_KEY"),  # 输入API key"units": "metric",                         # 使用摄氏度而不是华氏度"lang": "zh_cn"                            # 输出语言为简体中文}# Step 3.发送GET请求response = requests.get(url, params=params)# Step 4.解析响应data = response.json()return json.dumps(data)

Langchain内置工具实现

  • LangChain具有丰富的、数以百计的内置工具,使用极少代码即可实现工具调用。
  • LangChain工具集
功能类别工具名称简要说明
🔍 搜索工具TavilySearchResults快速搜索实时网络信息
SerpAPISearchWrapper基于 SerpAPI 的搜索结果工具
GoogleSearchAPIWrapper调用 Google 可编程搜索引擎
🧮 计算工具PythonREPLTool执行 Python 表达式并返回结果
LLMMathTool结合 LLM 和数学推理能力
wolframAlphaQueryRun基于 Wolfram Alpha 的计算引擎
📊 数据工具SQLDatabaseToolkit构建 SQL 数据库查询工具集
PandasDataFrameTool用于在 Agent 中操作表格数据
🌐 网络/APIRequestsGetTool / RequestsPostTool执行 HTTP 请求
BrowserTool / PlaywrightBrowserToolkit自动化网页浏览与抓取
📄 文件处理ReadFileTool读取本地文件内容
WriteFileTool写入文本到指定文件中
🔍 检索工具FAISSRetriever基于向量的文档检索工具
ChromaRetriever使用 ChromaDB 的检索器
ContextualCompressionRetriever上下文压缩检索器,适合长文档
🧠 LLM 工具ChatOpenAI / OpenAIFunctionsTool使用 OpenAI 模型作为工具调用
ChatAnthropicAnthropic Claude 模型封装工具
🔧 自定义工具@tool 装饰器任意函数可封装为 Agent 可调用工具
Tool 类继承自定义更复杂逻辑的工具实现

遵循MCP协议接入外部工具

  • MCP的全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于2024年11月正式提出。

  • MCP的技术核心目标是创建一种统一的大模型调用外部工具的通信规范,特定功能的外部函数只需一次开发,就可以被到处使用。

  • 下面有一组图能够清晰的解释MCP工具在智能体开发过程中实际带来的提效作用。
    在这里插入图片描述

  • MCP的技术生态可以划分为三层,最底层是协议层,也就是“文字版”的规定、规范,而为了普及这一规范,让更多的人更加快速的完成自己的MCP工具开发,Anthropic进一步的提供MCP开发工具,SDK,快速完成MCP工具开发。
    在这里插入图片描述

  • MCP项目官网

  • 在MCP技术架构中,MCP的SDK和MCP技术生态需要重点关注。MCP SDK已支持Python、TypeScript、Java、Kotlin和C#等编程语言进行客户端和服务器创建。借助这些库,仅需几行代码,即可快速构建一个MCP工具。

    # server.py
    from mcp.server.fastmcp import FastMCP# Create an MCP server
    mcp = FastMCP("Demo")# Add an addition tool
    @mcp.tool()
    def add(a: int, b: int) -> int:"""Add two numbers"""return a + b# Add a dynamic greeting resource
    @mcp.resource("greeting://{name}")
    def get_greeting(name: str) -> str:"""Get a personalized greeting"""return f"Hello, {name}!"
    
  • 如果我们并不需要开发MCP工具,而只想要借助现成的MCP工具快速完成智能体开发,那么就需要重点关注现在的MCP集成平台。

    • MCP官方服务器合集
    • MCP Github热门导航
    • Smithery
    • MCP导航
    • 阿里云百炼
    • 魔搭社区MCP广场
    • mcp.run

MCP核心技术概念

MCP CS架构模式

  • MCP是一种围绕大模型外部函数工具创建的统一范式,因此MCP工具从诞生之初就是客户端(client)与服务器(server)分离的架构。服务器与客户端的技术概念可以借助MySQL这个通用的数据库软件进行理解,在MySQL中,服务器指的是数据库实际运行环境,例如公司内部的某个统一用于数据存储的物理机,而客户端,则指的是SQL编写和运行的环境,可以是比如数据分析师用的笔记本。每次要进行查数时,数据分析师就可以在自己的笔记本上运行MySQL WorkBench(一个SQL编程的IDE),然后借助MySQL客户端,给公司的MySQL服务器发送查数的请求。
  • MCP Server(服务器),指的是MCP工具运行的环境,而MCP Client(客户端),则指的是能够调用MCP工具、或者说给MCP工具发送请求并接受结果的环境。
    在这里插入图片描述
    在这里插入图片描述

MCP离线、在线运行模式

  • 因为MCP采用服务器和客户端分离的架构,所以MCP支持两种调用方法(本地运行和在线运行)。本地运行(离线运行),MCP服务器和MCP客户端在同一台电脑上进行运行;其在线运行(异地部署运行),MCP服务器在远程服务器或者云端运行,借助HTTP网络通信来进行响应。对应着MCP工具调用的两种核心模式,分别是stdio(本地)模式调用和SSE&streamable HTTP(在线)模式调用。
特性StdioSSEStreamable HTTP
通信方向双向(但仅限本地)单向(服务器到客户端)双向(适用于复杂交互)
使用场景本地进程间通信实时数据推送,浏览器支持跨服务、分布式系统、大规模并发支持
支持并发连接数中等高(适合大规模并发)
适应性局限于本地环境支持浏览器,但单向通信高灵活性,支持流式数据与请求批处理
实现难度简单,适合本地调试简单,但浏览器兼容性和长连接限制复杂,需处理长连接和流管理
适合的业务类型本地命令行工具,调试环境实时推送,新闻、股票等实时更新高并发、分布式系统,实时交互系统

  • 三种传输方式
  • stdio传输:适合本地进程之间的简单通信,适合命令行工具或调试阶段,但不支持分布式。
  • SSE传输:适合实时推送和客户端/浏览器的单向通知,但无法满足双向复杂交互需求。
  • Streamable HTTP传输:最灵活、最强大的选项,适用于大规模并发、高度交互的分布式应用系统,虽然实现较复杂,但能够处理更复杂的场景。

离线MCP工具托管平台

  • 是调用在线MCP服务,只能了解其功能,离线的MCP服务,MCP工具是完全开源的,在调用之前,开发者都需要将其源码先下载到本地,然后再运行。
  • npx安装的mcp工具托管在npmjs.com,uvx安装的mcp工具托管在pypi.org,,每次运行uvx命令,其本质就是将工具源码从pypi平台上下载到本地再来进行运行。

MCP在线托管服务

  • 开发者可以直接使用SSE或者流式HTTP方式请求调用在线的MCP工具,从而快速完成开发工作。
    国内主流MCP在线托管服务平台
  1. 蓝耘MCP广场:由蓝耘科技推出的集成化MCP服务平台,提供千余款热门MCP服务,覆盖知识管理、天气查询、安全审计等场景,支持云托管和本地部署,开发者可通过自然语言搜索快速匹配服务并生成SSE连接地址。

  2. AIbase MCP集合平台:收录全球超12万项MCP服务,提供一站式资源整合,包含热门推荐、最近更新服务及开发效率工具,支持浏览器自动化、动态指纹伪装等高级功能,并配套详细教程和安全管理指南。

  3. 阿里云百炼MCP服务:业内首个全生命周期托管平台,支持预置服务(如高德地图、无影云电脑)和自定义服务部署,基于函数计算实现弹性资源调度,5分钟即可完成智能体搭建,兼容工作流调用。

  4. 魔搭MCP广场:中文社区最大MCP资源库,独家首发支付宝支付、MiniMax多模态生成等服务,提供MCPBench评估工具和实验场调试环境,支持云托管与第三方集成,已上线1500余种服务。

  5. Smithery:标准化MCP托管枢纽,支持开发者快速集成外部数据源和工具,提供统一接口和灵活配置选项,加速Agent型AI开发,适用于智能客服、个性化推荐等场景。

  6. MCPmarket.cn:专注云托管部署的"智能体App Store",提供高德地图、Playwright网页抓取等即用型服务,支持SSE协议一键连接,即将推出Playground对话测试功能。

  7. 腾讯云AI开发套件:内置MCP插件协议和托管环境,提供天气查询、网页搜索等模板服务,开发者可自定义插件并免运维部署,支持小程序/H5多端接入。

  8. 七牛云Agent托管服务:新推出的MCP兼容平台,支持企业级服务托管和动态资源分配,具体功能尚在扩展中。[26]

LangGraph技术概述

LangGraph

  • LangGraph和LangChain同宗同源,底层架构完全相同、接口完全相通。从开发者角度来说,LangGraph也是使用LangChain底层API来接入各类大模型、LangGraph也完全兼容LangChain内置的一系列工具。换而言之,LangGraph的核心功能都是依托LangChain来完成。但是和LangChain的链式工作流哲学完全不同的是,LangGraph的基础哲学是构建图结构的工作流,并引入“状态”这一核心概念来描绘任务执行情况,从而拓展了LangChain LCEL链式语法的功能灵活程度。
    在这里插入图片描述
  • LangGraph是基于LangChain进行的构建,无论图结构多复杂,单独每个任务执行链路仍然是现行的,其背后仍然是靠着LangChain的Chain来实现的。因此我们可以这么来描述LangChain和LangGraph之间的关系,LangGraph是LangChain工作流的高级编排工具,其中“高级”之处就是LangGraph能按照图结构来编排工作流。

LangGraph三层API架构

  • 尽管图结构看起来比链式结构灵活很多,但在实际开发过程中,要创建一个图结构却绝非易事。要在代码环境中描述清楚一个图,至少需要清晰的说明图中有哪些节点,不同节点之间是什么关系(边如何连接),同时还需要设置各节点功能,然后才能测试上线,这个流程其实是非常复杂的。
# 1. 定义结构化状态模型 
class CalcState(BaseModel): x: int # 2. 定义节点函数,接收并返回 CalcState 
def addition(state: CalcState) -> CalcState: print(f"[addition] 初始状态: {state}") return CalcState(x=state.x + 1) def subtraction(state: CalcState) -> CalcState: print(f"[subtraction] 接收到状态: {state}") return CalcState(x=state.x - 2) # 3. 构建图 
builder = StateGraph(CalcState) builder.add_node("addition",  addition) 
builder.add_node("subtraction",  subtraction) builder.add_edge(START,  "addition") 
builder.add_edge("addition",  "subtraction") 
builder.add_edge("subtraction",  END) graph = builder.compile()  # 4. 执行图:传入结构化状态对象 
initial_state = CalcState(x=10) 
final_state = graph.invoke(initial_state)  
  • 不过这对于LangChain来说并不难解决。LangChain生态各框架的核心思路都是“既要有底层API来定义基础功能,同时也要有高层API来加快开发效率”,就好比LangChain中既有LCEL语法、同时也有Agent API一样,LangGraph也提供了基于图结构基础语法的高层API。LangGraph的高层API主要分为两层,其一是Agent API,用于将大模型、提示词模板、外部工具等关键元素快速封装为图中的一些节点,而更高一层的封装,则是进一步创建一些预构建的Agent、也就是预构建好的图,开发者只需要带入设置好要带入的工具和模型,三行代码就能借助这些预构建好的图,创建一个完整的Agent。
tools =[search_tool,python_inter,fig_inter]
model=ChatDeepSeek(model="deepseek-chat")
graph=create_react_agent(model=model,tools=tools)
  • 依托LangChain完善的生态、拥有丰富稳定的API架构、以及便捷上手等特性,使得LangGraph成为目前超越LangChain的新一代Agent开发框架。
    在这里插入图片描述

LangGraph搭建MCP服务端

  1. 创建项目
    uv init mcp-get-weather
    cd mcp-get-weather
    
  2. 创建、激活虚拟环境
    uv venv
    .venv\Scripts\activate
    
  3. 添加依赖
    uv add mcp httpx dotenv langgraph langchain-deepseek langchain-mcp-adapters
    
  4. 编写MCP服务器
  • weather_server.py

    import os
    import json
    import httpx
    from typing import Any
    from dotenv import load_dotenv
    from fastmcp import FastMCP# 加载环境变量
    load_dotenv(override=True)
    API_KEY = os.getenv('OPENWEATHER_API_KEY')# 初始化mcp服务器
    mcp=FastMCP("Weather Server")#OpenWeather API 配置
    OPENWEATHER_API_BASE = "https://api.openweathermap.org/data/2.5/weather"USER_AGENT = "weather-app/1.0"async def fetch_weather(city: str) -> dict[str, Any]|None:"""获取天气信息:param city: 城市名称(需使用英文,如 Beijing):return: 天气数据字典;若出错返回包含 error 信息的字典"""params={"q": city,"appid": API_KEY,"units": "metric","lang": "zh_cn"}headers={"User-Agent": USER_AGENT}async with httpx.AsyncClient() as client:response = await client.get(OPENWEATHER_API_BASE, params=params, headers=headers,timeout=1000)if response.status_code == 200:return response.json()else:print(f"Error fetching weather data: {response.status_code}, {response.text}")  # 增加日志输return Nonedef format_weather(data: dict[str,Any] | str)->str:"""解析天气数据字典,提取关键信息并格式化输出。功能:对可能缺失的嵌套数据字段进行容错处理,确保返回内容完整。参数:data: 天气API返回的原始数据字典返回:格式化后的天气信息字符串"""# 基础位置信息(城市、国家)- 缺失时显示"未知"city = data.get("name", "未知")  # 城市名称(顶层字段)country = data.get("sys", {}).get("country", "未知")  # 国家代码(嵌套在sys字段中)# 天气核心指标 - 缺失时显示"N/A"(Not Available)main_data = data.get("main", {})  # 提取main字段(包含温度、湿度等)temperature = main_data.get("temp", "N/A")  # 温度humidity = main_data.get("humidity", "N/A")  # 湿度wind_data = data.get("wind", {})  # 提取wind字段(包含风速等)wind_speed = wind_data.get("speed", "N/A")  # 风速# 天气描述 - weather字段可能为空列表,默认返回第一个元素的描述weather_list = data.get("weather", [{}])  # 提取weather数组(默认空字典避免索引错误)weather_description = weather_list[0].get("description", "未知")  # 天气状况描述# 格式化输出字符串(使用f-string拼接,添加emoji直观展示)weather_info = (f"🌍 {city}, {country}\n"f"🌡️ 温度:{temperature}℃\n"f"💧 湿度:{humidity}%\n"f"💨 风速:{wind_speed} m/s\n"f"☁️ 天气:{weather_description}\n")return weather_info@mcp.tool()
    async def query_weather(city: str) -> str:"""查询天气信息并返回结果注意:当大模型调用此工具时,必须使用参数名 'city' 来传递城市名称。city 参数只支持英文城市名或中文城市的拼音形式,不支持中文城市名直接输入。Args:city (str): 要查询天气的城市名称,仅支持英文或中文拼音例如:Beijing, Shanghai, london, tokyoReturns:str: 格式化的天气信息字符串,包含温度、湿度、风速和天气描述等信息Example:query_weather(city="Beijing")query_weather(city="Shanghai")query_weather(city="london")"""weather_data = await fetch_weather(city)if weather_data:return format_weather(weather_data)else:return "无法获取天气信息。请检查城市名称是否正确,确保使用英文或拼音格式。"if __name__=="__main__":mcp.run(transport="streamable-http", host="0.0.0.0", port=8000, path="/mcp/get_weather")
    
  • write_server.py

    import os
    from datetime import datetime
    from fastmcp  import FastMCP# 初始化 MCP 服务器
    mcp = FastMCP("WriteServer")# 文件保存目录
    OUTPUT_DIR = "./output"# 确保目录存在
    os.makedirs(OUTPUT_DIR, exist_ok=True)@mcp.tool() 
    async def write_file(content: str) -> str:"""将指定内容写入本地文件。:param content: 必要参数,字符串类型,用于表示需要写入文档的具体内容:return:字符串,表示是否成功写入"""# 创建带时间戳的文件名timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")file_name = f"note_{timestamp}.md"file_path = os.path.join(OUTPUT_DIR, file_name)try:with open(file_path, "w", encoding="utf-8") as file:file.write(content)return f"已成功写入本地文件{file_name},内容长度:{len(content)} 字符"except Exception as e:return f"写入文件失败: {str(e)}"if __name__ == "__main__":# 以标准 I/O 方式运行 MCP 服务器mcp.run(transport="streamable-http", host="0.0.0.0", port=8001, path="/mcp/write_file")
    
  1. 运行和测试
    uv run weather_server.py
    uv run write_server.py
    npx -y @modelcontextprotocol/inspector
    

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

LangGraph搭建MCP客户端

  • 使用LangGraph接入MCP工具,核心需要使用langchain_mcp_adapters库,该库可以将MCP工具信息进行解析,并让LangGraph顺利识别。识别后即可像任意其他工具一样接入LangGraph中并搭建智能体。
    在这里插入图片描述
  • LangGraph接入MCP 的核心原理为:weather_server.py → 启动为子进程 → 流式http通信 → MCP 协议→转化为langchain工具→LangGraph Agent执行读写,核心转换过程为::
  1. @mcp.tool() → 标准LangChain Tool
  2. stdio_client() → 自动处理read/write 流,其中read表示从MCP服务器读取响应的流,write表示向MCP服务器发送请求的流,对于
    stdio weather_server.py,他们就是子进程的stdoutstdin
  3. MultiServerMCPClient → 一键转换所有工具。

创建MCP配置文件

  • 为实现一个标准的MCP调用流程、即通过配置文件灵活说明MCP工具信息然后再进行调用,这里同样先创建一个servers_config.json 文件,用于记录MCP工具信息。
{"mcpServers": {"weather": {"transport": "streamable_http","url": "http://127.0.0.1:8000/mcp/get_weather"},"write": {"transport": "streamable_http","url": "http://127.0.0.1:8001/mcp/write_file"}}
}

修改.env配置文件和提示词模板

  1. 根项目下创建.env文件
    OPENAI_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1
    OPENAI_API_KEY=sk-xx
    MODEL=deepseek-r1-0528
    OPENWEATHER_API_KEY ="xxx"
    
  2. 创建提示词模板agent_prompts.txt
    你是一个智能体,具备以下两种能力:
    1.查询天气:调用query_weather(city: str),返回指定城市的实时天气。
    2.写入文件:调用write_file(content: str),将文本内容写入本地文件并返回结果。
    当用户提出请求时,你需要理解意图并选择相应的工具。如果请求缺少必要信息,先与用户确认后再调用工具。
    返回结果时以简洁、友好的方式回复。
    如果用户提出的问题与你的功能无关,请礼貌告知无法处理。
    

创建client.py主函数文件

"""
多服务器 MCP + LangChain Agent 示例
1. 读取 .env 中的 DS_BASE_URL / DS_API_KEY / DS_MODEL2. 读取 servers_config.json 中的 MCP 服务器信息
3. 启动 MCP 服务器(支持多个)
4. 将所有工具注入 LangGraph Agent,由大模型自动选择并调用
"""import asyncio
import json
import logging
import os
from typing import Any, Dict, List
from dotenv import load_dotenv
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.checkpoint.memory import InMemorySaver# 设置记忆存储
checkpointer = InMemorySaver()# 读取提示词
with open("agent_prompts.txt", "r", encoding="utf-8") as f:prompt = f.read()# 设置对话配置
config = {"configurable": {"thread_id": "1"  }}# ────────────────────────────
# 环境配置
# ────────────────────────────
class Configuration:"""读取 .env 与 servers_config.json"""def __init__(self) -> None:load_dotenv()self.api_key: str = os.getenv("OPENAI_API_KEY") or ""self.base_url: str | None = os.getenv("OPENAI_API_BASE") self.model: str = os.getenv("MODEL")if not self.api_key:raise ValueError("❌未找到 DS_API_KEY,请在 .env 中配置")@staticmethoddef load_servers(file_path: str = "servers_config.json") -> Dict[str, Any]:with open(file_path, "r", encoding="utf-8") as f:return json.load(f).get("mcpServers", {})# ────────────────────────────
# 主逻辑
# ────────────────────────────
async def run_chat_loop() -> None:"""启动 MCP-Agent 聊天循环"""cfg = Configuration()servers_cfg = Configuration.load_servers()# 1 连接多台 MCP 服务器mcp_client = MultiServerMCPClient(servers_cfg)tools = await mcp_client.get_tools()         # LangChain Tool 对象列表logging.info(f"✅已加载 {len(tools)} 个 MCP 工具: {[t.name for t in tools]}")# 2  初始化大模型(DeepSeek / OpenAI / 任意兼容 OpenAI 协议的模型)model = ChatOpenAI(model=cfg.model)# 3 构造 LangGraph Agentagent = create_react_agent(model=model, tools=tools,prompt=prompt,checkpointer=checkpointer)# 4 CLI 聊天print("\n🤖MCP Agent 已启动,输入 'quit' 退出")while True:user_input = input("\n你: ").strip()if user_input.lower() == "quit":breaktry:result = await agent.ainvoke({"messages": [{"role": "user", "content": user_input}]},config)print(f"\nAI: {result['messages'][-1].content}")except Exception as exc:print(f"\n⚠出错: {exc}")# 5 清理资源 print("\n🧹开始清理 MCP 客户端资源...")await mcp_client.cleanup()print("✅资源已清理,Bye!")if __name__ == "__main__":logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")asyncio.run(run_chat_loop())

代码解释如下:
✅ 从 .env 文件读取模型配置
✅ 从 servers_config.json 读取 MCP 服务器配置(支持多个服务器)
✅ 启动 MCP 客户端加载所有工具
✅ 用 LangGraph 创建 Agent,把所有工具挂载
✅ 在命令行与用户进行对话,模型自动选择工具
✅ 清理资源


  • MultiServerMCPClient
  • LangChain 模型上下文协议 (MCP) 适配器 MultiServerMCPClient 类

运行和测试

  • 运行天气查询mcp服务器和写文件服务器。
    uv run weather_server.py
    uv run write_server.py
    
  • 运行客户端
    uv run client.py
    
(mcp-get-weather) D:\Code\mcp-get-weather>uv run client.py
2025-09-03 21:33:17,951 - INFO - HTTP Request: POST http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:33:17,951 - INFO - Received session ID: ae8f8dc5178643049d862dfe525023b8
2025-09-03 21:33:17,952 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:33:17,953 - INFO - Received session ID: 4a9b7b411cbb43dfa37cea46cfaf27ba
2025-09-03 21:33:17,954 - INFO - Negotiated protocol version: 2025-06-18
2025-09-03 21:33:17,955 - INFO - Negotiated protocol version: 2025-06-18
2025-09-03 21:33:17,965 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 202 Accepted"
2025-09-03 21:33:17,966 - INFO - HTTP Request: POST http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 202 Accepted"
2025-09-03 21:33:17,967 - INFO - HTTP Request: GET http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:33:17,968 - INFO - HTTP Request: GET http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:33:17,972 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:33:17,973 - INFO - HTTP Request: POST http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:33:17,981 - INFO - HTTP Request: DELETE http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:33:17,983 - INFO - HTTP Request: DELETE http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:33:17,984 - INFO - ✅已加载 2 个 MCP 工具: ['query_weather', 'write_file']🤖MCP Agent 已启动,输入 'quit' 退出你: 请查询北京今天的天气,并保存到本地文件中。
2025-09-03 21:33:54,586 - INFO - HTTP Request: POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions "HTTP/1.1 200 OK"
2025-09-03 21:33:55,202 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:33:55,203 - INFO - Received session ID: 62e16bbc6a5c4c84b8c2f71de459b7e8
2025-09-03 21:33:55,203 - INFO - Negotiated protocol version: 2025-06-18
2025-09-03 21:33:55,210 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 202 Accepted"
2025-09-03 21:33:55,211 - INFO - HTTP Request: GET http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:33:55,214 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:35:18,146 - INFO - HTTP Request: DELETE http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:35:38,390 - INFO - HTTP Request: POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions "HTTP/1.1 200 OK"
2025-09-03 21:35:38,988 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:35:38,988 - INFO - Received session ID: 0b94ec07ea22493dbd87e617e05e9464
2025-09-03 21:35:38,989 - INFO - Negotiated protocol version: 2025-06-18
2025-09-03 21:35:38,996 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 202 Accepted"
2025-09-03 21:35:38,998 - INFO - HTTP Request: GET http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:35:39,000 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:35:51,629 - INFO - HTTP Request: POST http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:35:51,637 - INFO - HTTP Request: DELETE http://127.0.0.1:8000/mcp/get_weather "HTTP/1.1 200 OK"
2025-09-03 21:35:58,674 - INFO - HTTP Request: POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions "HTTP/1.1 200 OK"
2025-09-03 21:35:59,308 - INFO - HTTP Request: POST http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:35:59,309 - INFO - Received session ID: 334483d5a4044d61886a9a0b1f068d56
2025-09-03 21:35:59,309 - INFO - Negotiated protocol version: 2025-06-18
2025-09-03 21:35:59,315 - INFO - HTTP Request: POST http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 202 Accepted"
2025-09-03 21:35:59,317 - INFO - HTTP Request: GET http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:35:59,320 - INFO - HTTP Request: POST http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:35:59,329 - INFO - HTTP Request: POST http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:35:59,335 - INFO - HTTP Request: DELETE http://127.0.0.1:8001/mcp/write_file "HTTP/1.1 200 OK"
2025-09-03 21:36:08,265 - INFO - HTTP Request: POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions "HTTP/1.1 200 OK"AI: 北京的天气信息已成功保存到本地文件!以下是文件详情:
📄 文件名:`note_20250903_213559.md`
📝 内容长度:58 字符需要查看文件内容或进一步操作请随时告诉我! 😊
  • 文件内容:
🌍 Beijing, CN
🌡️ 温度:25.81℃
💧 湿度:84%
💨 风速:1.98 m/s
☁️ 天气:小雨

LangGraph接入HTTP MCP智能体

  • 在 SSE (Server-Sent Events) 模式 下,我们可以把 「工具 API」,用 URL 建立事件流、再用 MCP 服务器当成一个已经在网络上跑着的POST /messages 发指令。当前主流的使用形式可以归纳为两大类:自托管启动与平台托管直连。

  • 自托管启动(Self-hosted):主要应用 MCP 官方的 Python / TypeScript MCP SDK 把 Server 代码跑起来(FastAPI / Express 集成),程序启动后会打印或返回一个本地或内网 SSE URL,然后便可以用这个 URL 建立事件流接入到 openAI Agents SDK 框架中。如果需要使用 MCP 官方的 Python SDK 构建 SSE 模式的 MCP 服务器。

  • 平台托管直连(Platform-hosted):诸如 ModelScope 的 MCP 广场、mcp.run 等社区维护大量 MPC 服务并支持一键启动 MCP 的 SSE 模式。使用的方法非常简单,只需在平台首页选好 MCP Server → 生成一个 API-Key,一键生成 SSE URL,即可直接接入使用。
    对于国内开发者,通过“一键复制 URL + API-Key”就能拿到 SSE 端点的热门网站大致可以分为四类:

  1. 专门的 MCP 服务市场/目录(如 MCP Market、Albase、MCP Server Hub);
  2. 云厂商推出的官方托管平台(阿里云“百炼”与 Higress Marketplace);
  3. 行业 API 已内置 MCP & SSE(百度地图、腾讯位置服务等);
  4. IDE / 客户端集市 把第三方 SSE URL 聚合到本地(Cherry Studio、Cursor)。

MCP 热门导航网站

平台规模与特点访问链接
ModelScope MCP 广场超过 3000+ 个中文托管 MCP;详情页右侧直接复制 SSE URL,部分服务需在“API Key”栏目填 Token点击进入
MCP Market标榜“国内首个 MCP 服务市场”,已收录 1W+ SSE Server,并提供云托管与 Playground,一键生成专属 URL点击进入
Albase MCP 资源站整理 GitHub 上的热门 MCP Server 并直接给出 SSE 地址与使用教程点击进入
MCP Server Hub国际化,标签筛选 + “Copy URL”操作流畅,站内统计数千条 SSE Server点击进入
阿里云“百炼”官方托管“全周期 MCP 服务”,控制台能生成已鉴权的 SSE URL点击进入

在这里插入图片描述

{"mcpServers": {"weather": {"transport": "streamable_http","url": "http://127.0.0.1:8000/mcp/get_weather"},"write": {"transport": "streamable_http","url": "http://127.0.0.1:8001/mcp/write_file"},"12306-mcp": {"type": "streamable_http","url": "https://mcp.api-inference.modelscope.net/76e13034af0942/mcp"}}
}
你: 查询明天从北京到郑州的车票
AI: 我为您查询了明天(2025年9月4日)从北京到郑州的车票信息,以下是部分主要车次:🚄 **高铁/动车推荐**:
1. **G559次** 北京西→郑州东- 06:15发车 → 09:05到达(2小时50分)- 二等座:309元(有票)- 商务座:1072元(剩余6张)2. **G51次** 北京西→郑州东- 06:55发车 → 09:16到达(2小时21分)- 二等座:371元(有票)- 商务座:1165元(剩余13张)3. **G89次** 北京西→郑州东- 15:00发车 → 17:20到达(2小时20分)- 二等座:371元(有票)- 商务座:1165元(剩余12张)🛏️ **普速列车推荐**:
1. **Z149次** 北京西→郑州- 07:56发车 → 13:52到达(5小时56分)- 硬卧:163元(有票)- 软卧:251元(有票)2. **K599次** 北京丰台→郑州- 05:19发车 → 14:12到达(8小时53分)- 硬卧:163元(剩余2张)💡 **温馨提示**:
- 共查询到100+趟车次,高铁/动车最快约2小时,普速列车约5-9小时
- 如需特定时间或席别(如早班车/商务座),可进一步告知我为您筛选
- 以上票价和余票实时变动,请尽快购票需要我帮您预订或查询具体车次经停信息吗?
http://www.dtcms.com/a/365420.html

相关文章:

  • Docker学习笔记(一):容器基础、生态与安装实践
  • XSENS VISION NAVIGATOR助力智能城市自动化清洁机器人精确导航
  • 深度学习三大框架对比评测:PaddlePaddle、PyTorch 与 TensorFlow
  • 【2025ICCV】基于 ​CL-Splats​ 的3D高斯溅射模型
  • 第二家公司虽然用PowerBI ,可能更适合用以前的QuickBI
  • TypeScript 与 Java 重载机制对比
  • WebAppClassLoader(Tomcat)和 LaunchedURLClassLoader(Spring Boot)类加载器详解
  • “路桥养护”--奏响城市交通的安全乐章
  • 前端框架(Vue/React):界面更新的运行链路
  • Kafka Topic(主题)详解
  • 四维轻云:多期地理数据管理的得力助手
  • 14,FreeRTOS二值信号量操作
  • 差分隐私在运营指标:ABP 的 DP 计数器与噪声预算
  • 一文读懂RAG:从生活场景到核心逻辑,AI“查资料答题”原来这么简单
  • Wan2.2AllInOne - Wan2.2极速视频生成模型,4步极速生成 ComfyUI工作流 一键整合包下载
  • Java全栈学习笔记29
  • 关于牙科、挂号、医生类小程序或管理系统项目 项目包含微信小程序和pc端两部分
  • 从一次Crash分析Chromium/360浏览器的悬空指针检测机制:raw_ref与BackupRefPtr揭秘
  • 如何修复“您的连接不是私密连接”警告?
  • sentinel实现控制台与nacos数据双向绑定
  • Android音频学习(十六)——CreateTrack
  • 深度学习——CNN实例手写数字
  • 涉私数据安全与可控匿名化利用机制研究(下)
  • Triton Linalg - WrapFuncBodyWithSingleBlockPass
  • 软件设计师备考-(十) 多媒体基础
  • 两个子进程之间使用命名pipe
  • 如何构建企业级RAG知识库?实战方法、关键细节与平台选型
  • 并发编程——14 线程池参数动态化
  • PyTorch 损失函数与优化器全面指南:从理论到实践
  • 归一化的定义与作用