Agno中使用MCP

Agno中使用MCP

1 简介

模型上下文协议(MCP)能够通过标准化的接口与外部系统进行交互。使用Agno集成的MCP客户端,可以连接到任何MCP服务器。本文使用Agno连接MCP服务。

参考地址

复制代码
# MCP服务
https://github.com/modelcontextprotocol/python-sdk

# Agno中MCP调用
https://docs.agno.com/basics/tools/mcp/overview

安装MCP和Agno

复制代码
pip install "mcp[cli]"
pip install agno

2 实现MCP服务

MCP服务代码

mcp_server.py

python 复制代码
from mcp.server.fastmcp import FastMCP

# 创建MCP,Demo是MCP名字
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool(
    # 默认工具的名称
    name="add",
    # 说明
    title="加法",
    # 详细描述,大模型解析
    description="加法",
    # 是否结构化输出
    structured_output= None
)
def add(a: int, b: int) -> int:
    """Add two numbers"""
    print("加法")
    return a + b


# Add a subtraction tool
@mcp.tool()
def subtraction(a: int, b: int) -> int:
    """Add two numbers"""
    print("减法")
    return a - b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"


# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    """Generate a greeting prompt"""
    styles = {
        "friendly": "Please write a warm, friendly greeting",
        "formal": "Please write a formal, professional greeting",
        "casual": "Please write a casual, relaxed greeting",
    }

    return f"{styles.get(style, styles['friendly'])} for someone named {name}."


# Run with streamable HTTP transport
if __name__ == "__main__":
    # 使用SSE
    # mcp.run(transport="sse")
    mcp.run(transport="streamable-http")

输出

3 使用Agno实现MCP客户端

mcp_client.py

python 复制代码
import asyncio
from textwrap import dedent

from agno.agent import Agent
from agno.models.openai import OpenAILike
from agno.tools.mcp import MCPTools


async def run_agent(message: str) -> None:
    # 初始化工具
    # 使用SSE
    # mcp_tools = MCPTools(
    #     transport="sse",
    #     url="http://127.0.0.1:8000/sse"
    # )

    mcp_tools = MCPTools(
        transport="streamable-http",
        url="http://127.0.0.1:8000/mcp"
    )

    # 连接MCP
    await mcp_tools.connect()

    # 打印工具
    print(mcp_tools)

    # 自定义模型
    model = OpenAILike(
        # 设置自定义模型名称
        id="llm-v1",
        api_key="EMPTY",
        # 自定模型地址
        base_url="http://192.168.0.106:8000/v1"
    )

    try:
        # 智能体
        agent = Agent(
            model=model,
            tools=[mcp_tools],
            instructions=dedent("测试"),
            markdown=True,
        )

        # 运行智能体,并打印
        await agent.aprint_response(message, stream=True)
    finally:
        # 关闭服务
        await mcp_tools.close()


if __name__ == "__main__":
    # 调用加法
    asyncio.run(run_agent("1加1等多少"))
    # 调用减法
    asyncio.run(run_agent("1减1等多少"))

输出

4 使用MCP Inspector

启动服务,第一次会初始化配置。

复制代码
mcp dev .\mcp_server.py

启动服务界面

MCP Inspector连接界面

MCP Inspector简单使用

相关推荐
带娃的IT创业者8 小时前
WeClaw 架构演进史:从 0 到 1 构建跨平台 AI 助手的完整历程
人工智能·python·websocket·架构·fastapi·架构设计·实时通信
Storynone8 小时前
【Day28】LeetCode:509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
python·算法·leetcode
guts3508 小时前
使用python里的OpenCV包做简单的车道线检测
人工智能·python·opencv
sz-lcw8 小时前
HOG特征向量计算方法
人工智能·python·算法
ZTLJQ8 小时前
驾驭高并发:Python协程与 async/await 完全解析
服务器·数据库·python
一勺菠萝丶9 小时前
芋道框架 - API 前缀区分机制
java·linux·python
kcuwu.9 小时前
Python判断及循环
android·java·python
前进的李工9 小时前
LangChain使用之Model IO(提示词模版之ChatPromptTemplate)
java·前端·人工智能·python·langchain·大模型
Fairy要carry9 小时前
面试-Agent上下文过载、步骤混乱的问题
开发语言·python
今儿敲了吗9 小时前
python基础学习笔记第五章——容器
笔记·python·学习