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

相关推荐
love530love5 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
遇事不決洛必達5 小时前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
CryptoPP6 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
探物 AI7 小时前
把 MambaOut 塞进 YOLOv11:会有什么样的反应
python·yolo·计算机视觉
如竟没有火炬7 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠7 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Cosolar7 小时前
保姆级 CrewAI 教程:从零构建多智能体协作系统
人工智能·python·架构
GDAL7 小时前
使用 uv 管理 Python 版本
python·uv·版本
真实的菜7 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
cup118 小时前
[开源] Meta Assistant / 告别命令行,我为一堆 Python 脚本做了一个 Windows 任务栏的“家”
windows·python·工具·nuitka·脚本运行