news 2026/4/18 10:36:48

python mcp see

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python mcp see

"""3.1 【stdio模式】mcp服务端开发"""
#导入mcp依赖包
from mcp.server.fastmcp import FastMCP
#创建mcp实例
mcp = FastMCP("Tool MCP Server")

@mcp.tool()
def add_tool(x:int,y:int):
"""
有两个数字相加的加法工具
:param x: 第一个数字
:param y: 第二个数字
:return: 两个数字的和
"""
return x+y

@mcp.tool()
def sub_tool(x:int,y:int):
"""
有两个数字相减的减法工具
:param x: 第一个数字
:param y: 第二个数字
:return: 两个数字的差
"""
return x-y

if __name__ == "__main__":
print(" MCP Server Start!")
#启动mcp服务:有两种协议,分别是stdio和tcp,stdio模式下,transport参数必须为stdio
mcp.run(transport="sse")


"""3.2 【stdio模式】mcp客户端开发—连接服务端"""
import asyncio
import json
from contextlib import AsyncExitStack

from mcp import StdioServerParameters, stdio_client, ClientSession
from mcp.client.sse import sse_client
from openai import OpenAI
import time


class MCPClient:

def __init__(self):
self.async_exit_stack = AsyncExitStack()
self.session = None
self.deepseek = OpenAI(
api_key="sk-304d80ba4865490283ec012fcdfa568a",
base_url="https://api.deepseek.com"
)


async def connect_to_server(self,url:str):
# 一 、创建stdio_client
client = sse_client(url=url)
transport = await self.async_exit_stack.enter_async_context(client)
print('----------------------transport---------------------------')
print(transport)
print('----------------------transport---------------------------')
read_stream, write_stream = transport
print('----------------read_stream, write_stream------------------')
print(read_stream,write_stream)
print('----------------read_stream, write_stream------------------')

# 二、创建会话client
client_session = ClientSession(read_stream, write_stream)
self.session = await self.async_exit_stack.enter_async_context(client_session)
# 三、初始化会话
await self.session.initialize()

async def execute(self,query:str):
# 一、获取server服务端中的工具列表
response = await self.session.list_tools()
list_tools = response.tools
print("responce",response)
print("打印出获取的工具列表:",list_tools)
#二、创建function calling 格式(大模型使用)、
tools =[
{
"type":"function",
"function":{
"name":tool.name,
"description":tool.description,
"parameters":tool.inputSchema
}
} for tool in list_tools
]
print('------------tools-------------------')
print(tools)
print('------------tools-------------------')

# 三、 创建messages,deepseek大模型的格式
messages = [
{
"role":"user",
"content":query
}
]
print ('--------------------message0-----------------')
print(messages)
print('--------------------message0-----------------')

# 四、调用deepseek大模型
print('---------------message1--------------------')
print(messages)
print('---------------message1--------------------')
deepseek_response = self.deepseek.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools
)
# 打印出大模型的决策结果
print("==== deepseek 响应持结果:",deepseek_response)
choice_result = deepseek_response.choices[0]
print('--------------choice_result---------------------')
print(choice_result)
print('--------------choice_result---------------------')


#第二次调用大模型的前置参数
messages.append(choice_result.message.model_dump())
print('----------------messages2----------------')
print(messages)
print('----------------messages2----------------')
tool_call = choice_result.message.tool_calls[0]

print(" tool_call:",tool_call)
print("大模型决策的最终结果,工具名称:",tool_call.function.name,",参数:",tool_call.function.arguments)
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)

print('------function_name,arguments-------------------')
print(function_name,arguments)
print('------function_name,arguments-------------------')

# 五、调用工具链
tool_result = await self.session.call_tool(
name = function_name,
arguments=arguments
)
print("==== 工具调用结果:",tool_result)
#最终的结果
result = tool_result.content[0].text
print("==== 最终的结果:",result)

# 六、使用大模型生成最终的结果,并且使用语言模型生成最终的结果
messages.append({
"role": "tool",
"content": tool_result.content[0].text,
"tool_call_id": tool_call.id
})

print('----------------messages3----------------')
print(messages)
print('----------------messages3----------------')
# 再次调用大模型
deepseek_response = self.deepseek.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools,
)
# 获取最终的结果
result = deepseek_response.choices[0].message.content
print("==== 最终的结果:", result)


#关闭资源
async def aclose(self):
await self.async_exit_stack.aclose()

async def main():
client = MCPClient()

await client.connect_to_server("http://127.0.0.1:8000/sse")
await client.execute("帮我计算一下2加3等于几?")


await client.aclose()

if __name__ == "__main__":
asyncio.run(main())

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 9:59:58

《灵足之脑:大模型驱动双足机器人全栈技术实战系列》第 1 篇:具身智能引论 —— 从图灵测试到“物理图灵测试”的飞跃

《灵足之脑:大模型驱动双足机器人全栈技术实战系列》 第 1 篇:具身智能引论 —— 从图灵测试到“物理图灵测试”的飞跃 1. 引言:被困在屏幕里的灵魂 在过去十年里,人工智能的演进路径高度遵循“大脑先行”的策略。我们构建了能够博…

作者头像 李华
网站建设 2026/4/18 7:54:40

入职风险预警:构建企业人才防火墙的智能工具

在数字化招聘时代,企业面临的人才风险早已从“技能不匹配”延伸至“隐性风险潜伏”。一份看似完美的简历背后,可能隐藏着履历造假、职业信用污点或竞业协议纠纷等隐患。入职风险预警工具的出现,正是通过技术赋能与数据核验,为企业…

作者头像 李华
网站建设 2026/4/18 9:44:47

书剧飙祝平台工具

----数据是数字时代的石油 近年来,语音、人脸识别等“感知智能”技术已相对成熟,如何赋予机器常识和因果逻辑推理能力,实现“认知智能”,成为当下人工智能研究的核心,新一代人工智能技术也正在从“感知智能”向“认知…

作者头像 李华
网站建设 2026/4/18 7:59:28

趋势真的需要预测吗?职业交易员只看这一点

在所有交易方法中,价格行为是最接近市场本质的一种分析方式。它不依赖指标、不依赖预测,只关注一个问题:价格正在做什么。交易者最终能否盈利,不取决于你使用了多少工具、看了多少数据,而也只取决于——你入场之后&…

作者头像 李华
网站建设 2026/4/18 8:18:28

发那科弧焊机器人保护气节气设备

发那科弧焊机器人凭借高精度轨迹控制和稳定的连续作业能力,成为汽车制造、工程机械等行业规模化焊接的核心装备。弧焊作业中,保护气的稳定供给是保障焊缝质量的关键,其作用是隔绝空气、稳定电弧、减少飞溅,直接影响焊缝的成型美观…

作者头像 李华
网站建设 2026/4/18 8:45:02

从对抗到共生:解码“厌学拒学”背后的家庭动能阻滞与重建

一、现象透视:被遮蔽的求救信号凌晨两点的深圳湾,写字楼的灯光与住宅楼的台灯形成无声的对峙。孩子上了三个月补习班,数学分数从72分降至68分,理由是“老师讲的我都会,就是不想写”。另一户家庭中,初三女生…

作者头像 李华