有哪些支持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%
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?