有哪些支持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%


