发布时间:2026-03-25 21:42:03编辑:123阅读(285)
接入在线MCP服务流程
在SSE(Server-Sent Events)模式下、我们可以把MCP服务器当成一个已经在网络上跑着的工具API、用URL建立事件流、再用POST /messages发指令。当前主流的使用形式可以归纳为两大类:自托管启动与平台托管直连。
自托管启动(Self-hosted)
这种方式主要是应用MCP官方的Python/TypeScript MCP SDK把Server代码跑起来(FastAPI/Express集成),程序启动后会打印或返回一个本地、内网SSE URL、然后可以用这个URL建立事件流接入到OpenAI Agent SDK框架中。
平台托管直连(Platform-hosted)
诸如ModelScope的MCP广场、mcp.run等社区维护大量MPC服务并支持一键启动的SSE模型。使用方法非常简单,只需要在平台首页选好MCP Server-->生成一个API-KEY,一键生成SSE URL,即可直接接入使用。
进入ModelScope的MCP广场,访问地址:https://www.modelscope.cn/mcp
搜索12306 mcp

点击立即使用按钮,进入MCP服务详情页,最右侧会有一个通过SSE URL连接服务的说明:

复制上面的mcp配置文件,修改本地
servers_config.json
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["weather_server.py"],
"transport": "stdio"
},
"spider": {
"command": "python",
"args": ["spider_server.py"],
"transport": "stdio"
},
"12306-mcp": {
"url": "https://mcp.api-inference.modelscope.net/0e32603ec65c43/sse",
"transport": "sse"
}
}
}修改本地提示词文件
agent_prompts.txt
你是一个智能体,具备以下三种能力: 1.查询天气:调用query_weather(city:str),返回指定城市的实时天气 2.爬取网页信息:调用run_spider(url:str),将爬取到的网页内容返回 3.车票查询:调用12306-mcp,查询对应的车票信息并返回 当用户提出请求时,你需要理解意图并选择相应的工具。如果请求缺少必要信息,先与用户确认后再调用工具。返回结果时 以简洁、友好的方式回复。 如果用户提出的问题与你的功能无关,请礼貌告知无法处理。
client代码如下:
import asyncio
import json
from langchain_ollama import ChatOllama
from typing import Any,Dict
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.checkpoint.memory import InMemorySaver
# 设置记忆存储
checkpointer = InMemorySaver()
# 读取提示词
with open("./agent_prompts.txt", mode='r', encoding='utf-8') as f:
prompt = f.read()
# 设置对话配置
config = {
"configurable":{
"thread_id":"2"
}
}
class Configuration:
@staticmethod
def load_servers(file_path: str = "servers_config.json") -> Dict[str, Any]:
with open(file_path, mode='r', encoding='utf-8') as f:
return json.load(f).get("mcpServers", {})
async def run_chat_loop():
"""启动 MCP-Agent 聊天循环"""
cfg = Configuration()
servers_cfg = Configuration.load_servers()
# 连接多台MCP服务器
mcp_client = MultiServerMCPClient(servers_cfg)
_tools = await mcp_client.get_tools()
print(f"已加载{len(_tools)}个MCP工具:{[t.name for t in _tools]}")
# 初始化大模型
model = ChatOllama(
model="qwen3:8b",
temperature=0,
top_p=0.95,
)
# 构造 LangGraph Agent
agent = create_agent(
model=model,
tools=_tools,
system_prompt=prompt,
checkpointer=checkpointer
)
print("\n MCP Agent 已启动,输入'quit'退出")
while True:
user_input = input("\n你:").strip()
if user_input.lower() == "quit":
break
try:
result = await agent.ainvoke(
{"messages": [{"role":"user", "content":user_input}]},
config
)
print(f"\nAI:{result['messages'][-1].content}")
except Exception as e:
print(f"\n 错误:{e}")
if __name__ == '__main__':
asyncio.run(run_chat_loop())运行结果如下:
已加载10个MCP工具:['query_weather', 'run_spider', 'get-current-date', 'get-stations-code-in-city', 'get-station-code-of-citys', 'get-station-code-by-names', 'get-station-by-telecode', 'get-tickets', 'get-interline-tickets', 'get-train-route-stations']
MCP Agent 已启动,输入'quit'退出
你:查询12306余票信息{"date":"2026-03-29","from_station":"BJP","to_station":"SHH"}
AI:以下是北京到上海的火车票信息整理,按车次分类并标注关键信息,方便您快速筛选:
---
### **高铁/动车(G/D/CRH)**
#### **G27(北京南→上海虹桥)**
- **历时**:4小时32分钟
- **座位类型**:
- 商务座:无票
- 一等座:有票(1060元)
- 二等座:有票(662元)
- 无座:无票
#### **G25(北京南→上海虹桥)**
- **历时**:4小时18分钟
- **座位类型**:
- 一等座:有票(1060元)
- 二等座:有票(662元)
- 优选一等座:有票(1457元)
#### **G29(北京南→上海)**
- **历时**:4小时43分钟
- **座位类型**:
- 一等座:有票(1070元)
- 二等座:有票(669元)
- 优选一等座:有票(1471元)
#### **G31(北京南→上海虹桥)**
- **历时**:4小时54分钟
- **座位类型**:
- 一等座:有票(1060元)
- 二等座:有票(662元)
#### **G35(北京南→上海虹桥)**
- **历时**:4小时27分钟
- **座位类型**:
- 二等座:有票(662元)
---
### **动车(D)**
#### **D5(北京→上海)**
- **历时**:12小时06分钟
- **座位类型**:
- 二等卧:有票(542元)
- 二等座:有票(361元)
- 一等卧:有票(686元)
- 无座:有票(361元)
#### **D11(北京南→上海松江)**
- **历时**:12小时23分钟
- **座位类型**:
- 二等卧:有票(479元)
- 二等座:有票(319元)
- 一等卧:无票
#### **D17(北京→上海松江)**
- **历时**:12小时21分钟
- **座位类型**:
- 二等卧:有票(447元)
- 二等座:有票(298元)
- 一等卧:有票(566元)
- 无座:无票
---
### **特快/普快(T/Z)**
#### **T109(北京→上海)**
- **历时**:14小时58分钟
- **座位类型**:
- 硬座:有票(177.5元)
- 硬卧:有票(304.5元)
- 无座:有票(177.5元)
#### **Z281(北京丰台→上海松江)**
- **历时**:13小时23分钟
- **座位类型**:
- 硬座:无票
- 硬卧:无票
- 软卧:无票
#### **D9(北京南→上海南)**
- **历时**:12小时24分钟
- **座位类型**:
- 二等卧:有票(510元)
- 二等座:有票(340元)
- 一等卧:有票(603元)
---
### **关键建议**
1. **最快车次**:G27(4小时32分钟)或 G25(4小时18分钟)。
2. **最便宜选项**:T109硬座(177.5元)或 D5二等座(361元)。
3. **舒适度优先**:G25优选一等座(1457元)或 G29优选一等座(1471元)。
4. **夜间出行**:D5二等卧(542元)或 D11二等卧(479元)。
**注意**:部分车次如 Z281、G35 等无票,建议尽早购票或选择其他车次。
52485
52409
42508
39417
33852
30818
29579
24493
24351
22719
47°
64°
101°
285°
283°
289°
336°
284°
415°
398°