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简单使用

相关推荐
databook3 分钟前
MinMax vs Standard vs Robust:三种特征缩放怎么选
python·机器学习·数据分析
在世修行5 分钟前
智学文枢:实体模型层
python·orm·sqlalchemy
张张123y24 分钟前
# 后端第七课:FastAPI 实战入门(用刚学的 Python 写第一个 API 接口)
开发语言·python·mysql·api·fastapi
CCblandy25 分钟前
一致性哈希到底省了多少搬迁?本机实测 3 轮:取模 6→7 搬 85.8%,V=128 只搬 14.3%,虚拟节点太少会被倾斜骗
后端·python·云原生·性能优化·架构
Yan-英杰31 分钟前
【论文精读】 基于 TensorFlow 对卷积神经网络的优化研究:异构式 CPU+GPU 协同计算 + ReLU-Swish 激活函数
python·卷积神经网络
ydjs678899-bot1 小时前
如何在Java中打印pdf静默打印和打印对话框选择
java·python·pdf
把我格子衫拿来2 小时前
误差预算怎么做?从雅可比到蒙特卡洛的三维定位不确定度分析
python·蒙特卡洛·三维定位·误差分析·不确定度
文章永久免费只为良心2 小时前
Ctfshow_Web应用安全与防护_第二章_无字母数字命令执行
前端·python·安全·网络安全·渗透测试·ctf·红队渗透测试
2601_962885722 小时前
如何用 Python 获取上证指数、沪深300、中证500 等指数行情?
开发语言·python
昔我往昔2 小时前
LangChain_RAG_学习小结
后端·python