有哪些支持mcp的python开发框架?
网友回复
3、fastapi-mcp
from fastapi import FastAPI from fastapi_mcp import FastApiMCP app = FastAPI() FastApiMCP(app).mount() # MCP服务即刻生效!4、langchain
import asyncio
import pathlib
import sys
import typing as t
from langchain_core.messages import AIMessage, BaseMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.tools import BaseTool
from langchain_groq import ChatGroq
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from langchain_mcp import MCPToolkit
async def run(tools: list[BaseTool], prompt: str) -> str:
# 注意:原文使用了Groq,但为了更通用,这里可以替换为 OpenAI 或其他模型
# model = ChatGroq(model_name="llama-3.1-8b-instant", stop_sequences=None)
# 假设您已设置 OPENAI_API_KEY 环境变量
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini") # 使用 OpenAI 模型示例
tools_map = {tool.name: tool for tool in tools}
tools_model = model.bind_tools(tools)
messages: list[BaseMessage] = [HumanMessage(prompt)]
ai_message = t.cast(AIMessage, await tools_model.ainvoke(messages))
messages.append(ai_message)
for tool_call in ai_message.tool_calls:
# LangChain 工具名称通常是小写的
selected_tool = tools_map[tool_call["name"].lower()]
tool_msg = await selected_tool.ainvoke(tool_call["args"]) # 传递参数
messages.append(tool_msg) # 应为 ToolMessage 类型,但此处简化处理
# 注意:更完整的实现需要创建 ToolMessage
# from langchain_core.messages import ToolMessage
# tool_msg = ToolMessage(content=..., tool_call_id=tool_call['id'])
# 再次调用模型以获得最终的自然语言响应
return await (tools_model | StrOutputParser()).ainvoke(messages)
async def main(prompt: str) -> None:
server_params = StdioServerParameters(
command="npx",
# 确保您已全局安装或 npx 可以找到此包
args=["-y", "@modelcontextprotocol/server-filesystem", str(pathlib.Path(__file__).parent.parent)],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
toolkit = MCPToolkit(session=session)
...点击查看剩余70%
1、MCP 官方 Python SDK
功能:提供完整的 MCP 协议实现,支持快速开发 MCP Server 和工具集成。特点:
支持 FastMCP 快速构建 MCP Server(如天气查询、文件操作等)
提供 @mcp.tool() 装饰器,方便定义工具函数供大模型调用支持 stdio 和 sse传输方式,适用于本地和远程调用示例:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("demo")
@mcp.tool()
def get_files():
"""获取桌面文件列表"""
import os
return os.listdir(os.path.expanduser("~/Desktop"))
if __name__ == "__main__":
mcp.run(transport='stdio')
2、qwenagent支持rag、函数调用、mcp服务调用
https://github.com/QwenLM/Qwen-Agent/blob/main/README_CN.md
示例
import os
import asyncio
from typing import Optional
from qwen_agent.agents import Assistant
from qwen_agent.gui import WebUI
ROOT_RESOURCE = os.path.join(os.path.dirname(__file__), 'resource')
def init_agent_service():
llm_cfg = {'model': 'qwen-max'}
system = ('你扮演一个数据库助手,你具有查询数据库的能力')
tools = [{
"mcpServers": {
"sqlite" : {
"command": "uvx",
"args": [
...点击查看剩余70%
php如何检查一段html代码运行是否会有js语法错误?
如何破解绕开seedance2.0真人照片生成视频 限制?
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?


