通过简单易用的AI Agently框架学习和实践MCP编程

MCP最近特别火,但是学起来总感觉云里雾里,因为它涉及了MCP协议,MCP 客户端,MCP服务器端,以及LLM大模型应用端,概念多,流程较复杂,有些让人摸不着头脑.....

在学习了一些MCP应用的例子后,我是大约这样理解的:

MCP服务器端,提供MCP接口服务,并在内部实现跟程序、接口、数据库的沟通工作。MCP服务器竟然也是运行在客户机环境的。(当然现在网上也有公有的MCP服务器,但比较少)

MCP客户端,沟通LLM大模型与MCP服务器,一般都嵌在AI应用软件里面。如果要用MCP,那么需要一个支持MCP的应用端,比如5ire、NextChat、Dive以及mcphost等。

可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost-CSDN博客

Dive 也是一个方便使用的支持MCP的桌面应用_deepseek r1支持 mcp服务吗-CSDN博客

开源跨平台的桌面智能助手和MCP(Model Context Protocol)客户端:5ire 使用MCP(Model Context Protocol)实践_5ire mcp-CSDN博客  NextChat:一键免费部署你的私人 ChatGPT 网页应用,支持 Claude, GPT4 & Gemini Pro 模型。(MCP需要2.16版本才支持)_next web chat mcp-CSDN博客

这些应用内置MCP支持,这样就不太用了解MCP的内在机理,但是由于MCP应用还涉及到Nodejs,以及一些服务使用json配置文件启动,最终就是对MCP的了解就像隔了一层纱,现在的状态就是似懂非懂。

中国有句古话,叫:纸上得来终觉浅,绝知此事要躬行。怎样让我们从似懂非懂到真正理解和掌握MCP呢?我们可以自己写应用代码,通过实际操作将理论转化为实践,才能更深入地理解MCP,掌握它,并让它帮助我们解决实际学习、工作中的问题。

实践出真知

安装Agently库,然后先学习官方例子,再自己动手写MCP代码。

先安装Agently库

git clone https://github.com/AgentEra/Agently

通过Agently实现和调用MCP的小例子

Agently官方给了一个获取当前时间的例子,其中包括MCP服务器端的函数,我们学习和运行这个例子,并照葫芦画瓢,再添加了一个查看目录中文件的函数实现:

import Agently
agent = (
    Agently.create_agent()
        .set_settings("current_model", "OAIClient")
        .set_settings("model.OAIClient.auth", {"api_key": "hello"})
        .set_settings("model.OAIClient.url", "http://192.168.1.5:1337/v1")
        .set_settings("model.OAIClient.options", {"model": "claude-3.7-sonnet"})
)

from datetime import datetime
import pytz

@agent.tool(tool_name="get_now")
def get_current_datetime_decorated(
    timezone: (
        "str",
        "[*Required] Timezone string used in pytz.timezone() in Python"
    )
):
    """get current data and time"""
    tz = pytz.timezone(timezone)
    return datetime.now().astimezone(tz)

import os
@agent.tool(tool_name="get_pwd")
def get_current_pwd_decorated(
    pwd: (
        "str",
        "[*Required] directory string used in os.listdir() in Python"
    )
):
    """get current data and time"""
    output = os.listdir(pwd )
    return output


print(agent.input("我在济宁,现在几点了?").start())
print(agent.input("列出当前目录的文件").start())
print(agent.input("列出e:\github目录的文件").start())

用时51秒,三个问题全部输出完毕:

您好!现在济宁的时间是:2025年3月31日 13:33

这是中国山东省济宁市的当前时间,采用的是中国标准时间(CST,UTC+8)。
当前目录下的文件有:
1. deepseek_reasoning.ipynb
2. planning_loop_demo.py
3. study.ipynb

这些文件看起来都是与Python相关的文件,其中两个是Jupyter笔记本文件(.ipynb),一个是Python脚本文件(.py)。
# e:\github目录文件列表

在e:\github目录下共有43个文件/文件夹:

主要内容包括:
- 开源AI模型相关:如`deepseek-engineer`、`deepseek-thinker-mcp`、`llama.cpp`、`llama2.c`、`TinyDeepSeek`、`whisper.cpp`等
- 操作系统学习材料:`xv6`相关的多个仓库和中文书籍
- 深度学习框架:`paddlenlp`、`paddlefleetx`、`torchmd`等
- AI应用:`stable-diffusion-webui`、`open-interpreter`、`dify`
- 嵌入式项目:`HoloCubic`、`letter-shell`、`free-rtos-cli-shell`
- 量化交易相关:`wondertrader`、`wtpy`、`backtrader`

这些项目涵盖了AI、操作系统、量化交易、嵌入式开发等多个技术领域。

第一个问题是列出当前时间,使用的是get_current_datetime_decorated这个函数,获取当前时间有一个非常流行的小MCP,它的配置是:

{
  "key": "Time",
  "description": "A Model Context Protocol server providing tools for time queries and timezone conversions for LLMs",
  "command": "uvx",
  "args": [
    "mcp-server-time",
    "--local-timezone=Asia/ShangHai"
  ]
}

而我们当前没有用MCP官方的mcp-server-time ,而是用了Agently提供的get_current_datetime_decorated 这个python函数。

同时,学习get_current_datetime_decorated函数的写法,我们写了自己定义的获得当前目录文件列表的get_current_pwd_decorated函数,并用大模型来调用它。第一次是问当前目录文件列表,第二次是给了一个目录参数,获取那个目录的文件列表,两次都被成功执行,分别列出了指定目录的文件。

小小总结下

一个小小的python函数,再加上一句话的问题

print(agent.input("列出当前目录的文件").start())
print(agent.input("列出e:\github目录的文件").start())

大模型通过MCP列出了本机的目录文件,真是太了不起了。想象一下,我们可以让大模型做更多事情啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值