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

相关推荐
aiguangyuan2 小时前
从零实现循环神经网络:中文情感分析的完整实践指南
人工智能·python·nlp
喵手2 小时前
Python爬虫零基础入门【第九章:实战项目教学·第1节】通用新闻采集器:从零打造可复用的静态站模板!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·新闻采集器·静态站模版
摸鱼仙人~2 小时前
从 Gunicorn 到 FastAPI:Python Web 生产环境架构演进与实战指南
python·fastapi·gunicorn
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 基于Django框架中山社区社会补助系统为例,包含答辩的问题和答案
后端·python·django
醉舞经阁半卷书12 小时前
Matplotlib从入门到精通
python·数据分析·matplotlib
历程里程碑2 小时前
Linux 5 目录权限与粘滞位详解
linux·运维·服务器·数据结构·python·算法·tornado
程序员哈基耄3 小时前
安全高效,本地运行:全能文件格式转换工具
大数据·python·安全
lixin5565563 小时前
基于神经网络的音乐生成增强器
java·人工智能·pytorch·python·深度学习·语言模型
养海绵宝宝的小蜗3 小时前
Python第二次作业
开发语言·python